Friday, September 4, 2026
71 changes · master
Enhancements to existing features
Withholding tax residual amounts can now be used more reliably in search filters and automated rules. This makes it easier for teams to find and act on accounting entries based on remaining withholding balances.
Original PR description
This PR adds a `_compute_sql` on `withholding_residual_amount_currency` so that it can be used in domains. task-6182154 Enterprise PR - https://github.com/odoo/enterprise/pull/130274
French accounting localization now treats Monaco as part of the EU VAT group while preserving a separate EU group that excludes Monaco. New localization packages were also added for French overseas territories, helping businesses apply the right local accounting and tax setup in those regions.
Original PR description
[[IMP] l10n_fr,l10n_fr_account: European union vat](https://github.com/odoo/odoo/commit/9870a204bb64bdf8a11e433eef3a9e9f8f3fad86)
This commit will add Monaco to the European union vat country group and
create a new country group that is the same than the european union but
without monaco
task-6321652
[[ADD] l10n_{gf,gp,mq,re,yt}: new localization](https://github.com/odoo/odoo/commit/58518e1d7df773a70c595bd3842a33ac6be611bb)
Like Monaco, we need to add new localization package for
the drom countries
task-6321652
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Forward-Port-Of: odoo/odoo#284404Sales cash rounding is easier to manage, with editable and archivable rounding methods, clearer handling when rounding has no effect, and better default profit and loss account setup. These changes reduce configuration mistakes and make invoice rounding behavior more transparent for users.
Original PR description
This commit is a followup of the work done in this PR https://github.com/odoo/odoo/pull/283020 It adds the following improvements: 1) Show the icon to remove the cash rounding in case of biggest_tax strategy before saving the record 2) set profit/loss default accounts on the company 3) Fix unit test (partner category count says 3 while actually 2 are included) 4) when the tax group groups 0% taxes, should never be != 0, and notify the user that no rounding took effect 5) Make rounding methods archivable 6) Make the rounding methods list view editable top, and support multi edit 7) Compute new rounding method records names 8) Restrict rounding profit/loss accounts to internal groups of income/expense task-6501537
Users can now open the full composer while editing existing Chatter messages or notes, with the current content carried over. This makes it easier to use richer editing options such as formatting, attachments, and mentions while ensuring the original message is updated rather than duplicated.
Original PR description
**Description of the issue/feature this PR addresses:** ---------------------------------------------- When editing messages or log notes from the Chatter, users are limited to the inline composer…
**Description of the issue/feature this PR addresses:** ---------------------------------------------- When editing messages or log notes from the Chatter, users are limited to the inline composer and cannot switch to the full composer. This restricts their ability to perform advanced editing (rich formatting, attachments, mentions handling, etc.) once edit mode is initiated. **Current behavior before PR:** ---------------------------------------------- - No option is available to open the full composer while editing - Users must either continue with limited inline editing or discard changes - Full composer can only be used when creating new messages, not editing existing ones **Desired behavior after PR is merged:** ---------------------------------------------- - "Open Full Composer" action is available while editing messages/notes - Full composer opens with existing message content pre-filled - Attachments, mentions, and formatting are preserved during transition - Saving from full composer updates the original message instead of creating a new one - Existing behavior for new messages remains unchanged Related Enterprise PR: https://github.com/odoo/enterprise/pull/126622 Task-6015654 ---------------------------------------------- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update makes two additional phone status icons available in Odoo's web interface: forwarded calls and paused phone state. It helps ensure these call-related statuses can be displayed consistently wherever the interface needs them.
Original PR description
Task-6524528
Indian reporting now includes audit checks for Form 26, helping businesses review required tax return information more consistently. This improves compliance support by flagging relevant items during the reporting process.
Original PR description
This PR adds audit checks for Form 26 in India. task-6182154 Community PR - https://github.com/odoo/odoo/pull/286430
The VoIP call transfer screen now uses clearer action buttons for direct and attended transfers, while the cancel option has been moved to a back button in the header. This makes the transfer flow easier to understand and helps users choose the right transfer action more quickly.
Original PR description
[Task-6524528](https://www.odoo.com/odoo/project/5778/tasks/6524528)
Users can now open the full message composer when editing chatter messages, giving them a more complete editing experience. The underlying context naming was also aligned with existing mail conventions, improving consistency for future maintenance.
Original PR description
The clicked_on_full_composer context key is renamed tomail_full_composer. The new name follows the naming of the other mail context keys. Related Community PR: https://github.com/odoo/odoo/pull/256870 task-6015654
The timesheet assistant now gives more importance to recent activity matches, so suggestions adapt faster when people move to new projects or tasks. It also cleans up outdated local history and reduces unnecessary lookups, making suggestions more relevant and efficient.
Original PR description
Previously, the timesheet assistant's local configuration matched activities to projects/tasks using a strict historical tally. A match made 6 months ago carried the exact same mathematical weight as a match made today. This caused old habits to stubbornly override new assignments. This commit introduces an exponential time-decay algorithm to the frequency computation: - Matches are now weighted based on their `datetime` stamp. - The weight drops by 50% every 5 days (half-life algorithm). - Recent timesheet entries quickly accumulate enough fractional votes to surpass the decayed votes of older, outdated projects. in this commit i updated the matching of local rules to be case sensitive for better matching (eg. "Meeting with client" is the same as "meeting with client") Task: 6267713 Forward-Port-Of: odoo/enterprise#129997 Forward-Port-Of: odoo/enterprise#124669
The AI update process now blocks empty selection criteria in all cases, including flows that ask for confirmation. This reduces the risk of an AI mistake changing every record unintentionally, while still allowing deliberate all-record updates when an explicit matching condition is provided.
Original PR description
The llm can hallucinate and call the update tool with an empty domain which will result in performing the updates on all the records of a certain model. To prevent hallucinations and at the same time allow the llm to update all the records if it actually needs to, an error is thrown if the domain is empty stating that updating with an empty domain is prohibited and a domain that matches all records should be used instead. This will make the llm conscious about passing a domain that actually matches all records and not just use an empty domain. Note: the update tool was already throwing an error if the domain is empty but only if tool_request_confirmation is False. If the confirmation is True, which is the case in mcp, the domain would be accepted and the updates would go through. Forward-Port-Of: odoo/enterprise#130349
Manufacturing now supports packing finished products as part of the production workflow, aligning manufacturing with existing stock packing processes. This helps teams prepare goods for shipping or storage more efficiently, though some automated print actions from detailed stock move lines are not yet triggered and are planned for a later update.
Original PR description
In this commit, we introduce the basic functionality of put in pack in MRP, as it makes sense to pack the manufactured product when needed. Later improvements to be done in order to tweak the behaviour and a `Put in Pack` action might be added on the operation directly. For now, the `Put in Pack` action in stock move lines don't trigger the hooks correctly and it should be fixed in another PR for 19.0 (since this PR targets V20), This means that on putting on pack from the stock move line operations list, f you have the print on "Put on Pack" or similar on, it won't be triggered. Task: 6247512 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Public holidays now appear in Discuss the same way as regular time off, using each employee's company calendar when they have no approved leave. This helps colleagues better understand availability by showing banners, status, and names with an expected return date when relevant.
Original PR description
**Public holidays** are now treated like regular out-of-office status in Discuss. and the holiday is computed on hr.employee from the employee’s company calendar (only when they have no validated leave). The Discuss banner, IM status, and formatted display name show “back on XXX” when appropriate, task-2377854 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Invoices sent through Egypt ETA e-invoicing will now be checked for overly long sales or purchase references before submission. This gives users a clearer error message when references exceed the 100-character limit, helping them correct the issue faster and avoid confusing API responses.
Original PR description
… and purchase order reference Currently, when users submit invoices with ref exceeding 100 characters including spaces, the ETA API returns a JSON validation error offering no clear guidance on how to fix the error. Therefore, we are adding a check in _check_move_configuration to add an error if length of ref or invoice_origin is greater than 100 task-6420490 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 builder record selection buttons can now show custom wording instead of only the default prompt. They also handle simpler selection data by looking up missing record names automatically, making builder components easier to reuse and maintain.
Original PR description
- accept non-default message on button of builder many2many - support only `id` from action with builder many2many This was part of https://github.com/odoo/odoo/pull/258135, but it can be merged independently
Online shop filtering now refreshes key page controls consistently, including breadcrumbs, sorting, search, category links, and floating filter controls. This gives shoppers clearer navigation and prevents old filter options or reset links from lingering after they refine product results.
Original PR description
Applying shop filters without a full page reload left several server-rendered regions stuck at their page-load state. The products header (breadcrumb, sort, filmstrip, search) and the floating bar are now refreshed on each update, so their keep() links are rebuilt against the current filters rather than the ones present at page load. Searching now targets a clean /shop, and the category links, "All Products" and "Clear Filters" share one reset dict, so searching or selecting a category clears the active filters consistently. The on-sale and in-stock ribbon pills now go through the same async flow as the other filters instead of forcing a full page reload. Also fix the collapsible category tree, whose toggle collapsed its own header: after the title became a div, the inheriting xpath matched the title instead of the category list. task-6297769 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Purchase orders will no longer automatically create vendor price lists when confirmed. If no manual vendor price list exists, Odoo now uses the most recent confirmed purchase order line as the reference price, helping businesses with frequently changing supplier prices avoid outdated pricing records.
Original PR description
Before, confirming a purchase order automatically created a vendor pricelist (product.supplierinfo) for every product/vendor without one, silently locking the first purchase price in as pricelist. In…
Warehouse batch transfers and wave picking are now presented as a unified workflow, making it easier for teams to group either full transfers or individual move lines in one place. Automatic batching by carrier was also corrected so deliveries for different carriers are no longer incorrectly mixed.
Original PR description
Odoo's definition of wave picking does not match the industry standard. This commit blends the two concepts at the UI level. Inside a batch transfer, you can add a whole transfer or individual move lines, as previously with a wave transfer. Task-6294586
Manufacturing barcode workflows now include Put in Pack actions, letting users package finished goods or by-products directly during barcode operations. Manufacturing operation settings also expose the related packaging options, making package handling and package PDF printing easier to configure and use.
Original PR description
After https://github.com/odoo/odoo/pull/267679 and the introduction of `Put in Pack` in MRP. We can now show put in pack options in the configuration of MRP. Task: 6247512
The appointment website editor now shows the intended message when a selection list is empty. This makes the configuration experience clearer for users setting up appointment options.
Original PR description
The corresponding commit in community add the `message` props to `BuilderMany2Many`. This commit uses it (instead of the non-existant `defaultMessage`) task-5245362
Employee group insurance fields now appear only when group insurance is selected, making employee records cleaner and easier to manage. Group insurance employee contributions are also included in Belgian tax reports and used to reduce withholding taxes where applicable.
Original PR description
Now, the group insurance fields are only displayed on the employee's form when the Group Insurance field is checked. Also changed the _onchange methods for hospital and ambulatory insurances to _compute methods. Added group insurance employee contribution to 281.10 and 281.20 reports. Added reduction for the withholding taxes based on 30% of the personnal employee contribution to the group insurance. task-6263912
The fleet stock planning view now shows recently used docks and responsible people even when they have no batches scheduled in the current period. This makes drag-and-drop planning easier by keeping common planning groups visible and ready to use.
Original PR description
To improve the drag and drop planning inside the gantt view, 'recent' docks and responsibles groups are displayed, even if they don't have any batch for the current period. Task-6294586
Customer reminder information is now handled more accurately per company, reducing confusion in multi-company setups. The update also standardizes report file naming and streamlines how follow-up responsibilities are selected, making reminder workflows more reliable.
Original PR description
- Make last_reminder computed per company. - Add get_default_partner_report_filename as a separate function for renaming the Open Items report instead of doing it manually. - Pass the follow-up line to _get_followup_responsible instead of recomputing it from the partner field in _execute_followup_partner. task-6401457
Quality checks are now created more efficiently when stock move lines are created or updated. This reduces database work for large warehouse operations with category-based quality rules, improving performance without changing user workflows.
Original PR description
Description ----------- Creating or updating stock move lines calls `_create_check()` to find the quality control points applicable to each detailed operation. Category-scoped points previously…
Description
-----------
Creating or updating stock move lines calls `_create_check()` to find the quality control points applicable to each detailed operation.
Category-scoped points previously searched for products once per quality point and category. The method then performed another `quality. point` search for every move line, although those point ids came from the recordset fetched at the beginning of the method.
This commit resolves all category-scoped products in one search and reuse the already-fetched quality points.
Benchmark
---------
```xml
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<!--
Reproduces the two query-scaling paths in stock.move.line._create_check:
category-scoped control points and a large batched move-line creation.
The final job is the benchmark target. With the former implementation,
its query count grew with both the control-point/category pairs and the
1,000 move lines. Use the scale option to increase only the move-line count.
-->
<record id="benchmark_move_line_quality_checks" model="populate.blueprint">
<field name="name">Benchmark: Move Line Quality Checks</field>
<field name="definition_xml" type="xml">
<create model="product.category" count="20" id="quality_parent_categories" scale="False">
<value name="counter" generator="misc.counter" start="1"/>
<field name="name" eval="f'Quality Benchmark Category {counter:02}'"/>
</create>
<create model="product.category" count="100" id="quality_child_categories" scale="False">
<value name="counter" generator="misc.counter" start="1"/>
<field name="name" eval="f'Quality Benchmark Subcategory {counter:03}'"/>
<field name="parent_id" ref="quality_parent_categories"/>
</create>
<create model="product.product" count="100" id="quality_products" scale="False" context="{'tracking_disable': True}">
<value name="counter" generator="misc.counter" start="1"/>
<field name="name" eval="f'Quality Benchmark Product {counter:03}'"/>
<field name="type" eval="'consu'"/>
<field name="is_storable" eval="True"/>
<field name="tracking" eval="'none'"/>
<field name="categ_id" ref="quality_child_categories"/>
</create>
<create model="quality.point" count="20" id="category_quality_points" scale="False">
<value name="counter" generator="misc.counter" start="1"/>
<field name="title" eval="f'Benchmark Category Control Point {counter:02}'"/>
<field name="apply_to" eval="'categories'"/>
<field name="product_category_ids" ref="quality_parent_categories" count="5"/>
<field name="picking_type_ids" eval="[Command.set([env.ref('stock.picking_type_in').id])]"/>
<field name="measure_on" eval="'move_line'"/>
<field name="measure_frequency_type" eval="'all'"/>
<field name="test_type_id" eval="env.ref('quality_control.test_type_passfail').id"/>
</create>
<create model="stock.picking" count="1" id="quality_picking" scale="False">
<field name="picking_type_id" eval="env.ref('stock.picking_type_in').id"/>
<field name="location_id" eval="env.ref('stock.stock_location_suppliers').id"/>
<field name="location_dest_id" eval="env.ref('stock.stock_location_stock').id"/>
<field name="origin" eval="'Quality control performance benchmark'"/>
</create>
<create model="stock.move" count="1000" id="quality_moves" scale="False" context="{'tracking_disable': True}">
<field name="picking_id" ref="quality_picking"/>
<field name="product_id" ref="quality_products"/>
<field name="product_uom_qty" eval="1.0"/>
<field name="uom_id" eval="env['product.product'].browse(product_id).uom_id.id"/>
<field name="location_id" eval="env.ref('stock.stock_location_suppliers').id"/>
<field name="location_dest_id" eval="env.ref('stock.stock_location_stock').id"/>
</create>
<create model="stock.move.line" count="1000" id="quality_move_lines" parallel="False">
<field name="move_id" ref="quality_moves"/>
<field name="product_id" eval="env['stock.move'].browse(move_id).product_id.id"/>
<field name="uom_id" eval="env['stock.move'].browse(move_id).uom_id.id"/>
<field name="quantity" eval="1.0"/>
<field name="location_id" eval="env.ref('stock.stock_location_suppliers').id"/>
<field name="location_dest_id" eval="env.ref('stock.stock_location_stock').id"/>
</create>
</field>
</record>
</odoo>
```
The populate benchmark creates 20 quality points linked to 5 categories each, resulting in 100 point/category relationships. It then creates 1,000 move lines in one batch, generating +-4.5k quality checks.
Products belong to child categories while quality points target their parents, this represents large stock operations with category-wide quality rules.
| | Before | After | Improvement |
|-------------|--------|-------|-------------|
| Time | 11.8s | 10.3s | 12.7% |
| Query count | 12487 | 10120 | 19.0% |
Reference
---------
task-6488454Website social media links now apply the correct brand colors for more supported platforms. This makes social media blocks look more consistent and polished when businesses add their profile URLs.
Original PR description
Colors for social media are defined with `$o-social-colors` in `addons/website/static/src/scss/primary_variables.scss`. css rules are defined to use these colors for links in "Social Media" snippet, but not all social media have a class defined. Also, some of these social media have a domain that do not match their name. With this change, setting a url of a social media (one added in `s_social_media/000.scss`) will show the icon with the correct color
Point of Sale reports now show clearer session timing, including opening dates for active sessions and full start-to-end periods for closed sessions. The Sales Details report layout and multi-configuration names are also improved, making reports easier for managers to read and compare.
Original PR description
In this commit: - Display the opening date in the Session report when the session state is opened (X report). - Show the session period (start and end datetime) for closed sessions and sales details report. - Move the "Sales Details" title to the header for the Sales Details report for better layout consistency. - Improve config name display in multi-config reports by joining them in a single line. - Extend `pos.session` display_name to optionally include the session start datetime using the `display_start_at` context. Task: 5980266
Adds support for work injury sick leave calculations required under Hong Kong Cap. 282. This helps payroll and HR processes apply the correct leave amount after accounting for any post-accident earnings.
Original PR description
Implement support for work injury sick leaves as per the Cap. 282 from Hong Kong. These calculations require some special logic to handle the worked day line calculation; as the rate should be applied AFTER reducing the leave amount by any post accident earnings given to the employee. task-6517522 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Product images can now be assigned to shared attributes like color or size, so businesses no longer need to duplicate the same image across every variant. This makes product setup faster and ensures customers see the most relevant images on product pages while shop listings stay consistent.
Original PR description
## Before this commit: - Variant images had to be uploaded and managed separately for each product variant. - Even when multiple variants shared the same characteristics (e.g., the same image for all…
## Before this commit:
- Variant images had to be uploaded and managed separately for each product
variant.
- Even when multiple variants shared the same characteristics (e.g., the same
image for all sizes of a blue T-shirt), the image had to be duplicated across
variants.
## After this commit:
### 1. Image assignment using attribute values
- All images related to a product template, including variant specific images,
are now visible in the Extra Media section on both the template and its
variant forms.
- In the variant form, images that do not apply to the current variant (i.e.,
belonging to other variants) are visually muted.
- Each image can be linked to specific attribute values using a dropdown in the
kanban view.
- An image is applied to a variant only if the variant matches all attribute
values assigned to the image.
- If none of the values of attribute is selected on the image, then that
attribute will not affect the matching logic.
- In the product form view, images with attribute values are displayed first,
followed by images without attribute values.
This removes unnecessary duplication and simplifies variant image management.
### 2. Shop page behavior
- The primary image is always the template's main image.
- The secondary image is the second template image.
### 3. Product page behavior
- For the selected variant:
- Variant specific images are displayed first, with the first image serving as
the variant's main image.
- Template images without attribute values are displayed afterward.
### 4. Variant main image logic
- The first variant specific extra image is used as the variant's main image.
- If the user manually updates the variant's main image, the first variant
specific extra image is updated to match it. If no variant specific extra
image exists, a new one is created using the main image.
- If no variant specific extra images exist, the variant falls back to the
template's main image.
### 5. Template main image logic
- The first extra image is used as the template's main image.
- If the user manually updates the template's main image, the first extra image
is updated to match it. If no extra image exists, a new one is created using
the main image.
task-5405584The Discuss app interface has been updated to better match Odoo's Frost design, with clearer navigation, rounded search bars, stronger visual separation, and more readable message and settings areas. These changes improve day-to-day usability for teams using chat, channels, calls, and notifications without changing core workflows.
Original PR description
This commit adapts the overall UI of Discuss app to match with frost design. 1. Overall layout of Discuss app follows the floating box style of other Odoo screens 2. Messaging Menu style has been…
This commit adapts the overall UI of Discuss app to match with frost design. 1. Overall layout of Discuss app follows the floating box style of other Odoo screens 2. Messaging Menu style has been tweaked for improved readability: less muted items, better spacing, better visual of active item 3. Search bars are pilled-shaped to match search view. 4. Discuss app thread actions have style matching view switcher for panel actions. 5. Channel Member role iconography and action label has been changed to be more natural: crown icon, filled (owner) and unfilled (admin), "Set Member" for cleared downgrading of member role, consistent order of actions based on role hierarchy) 6. More visible border around core UI elements, like composer or message bubble. 7. Add People button has now an icon next to label. 8. Chat bubble message preview now is colored to match the message bubble color. 9. Notification Settings and Voice & Video Settings have their visual slightly simplified, with more spacing and less borders. 10. Call View actions and dropdowns no longer have weird gradient effect in simulated dark theme. 11. Call View Card's context menu stays open even when mouse leaving the card without any click away. Also improved color in this context menu. 12. Orange message bubble (mention to self) color has been tweaked to catch more the eye of the user. 13. Mentions style has been tweaked to pop a bit more. 14. Chat window outline is more separated from the background content through stronger border instead of shadow effect. 15. Add icons to Save as Template and Manage Templates in full composer. 16. Is typing text now shows member names in bold. 17. Autoresize, AutoresizeInput and DiscussContent's header have been fixed to properly follow the shrink-to-fit content aspect of header. <img width="2137" height="563" alt="Screenshot 2026-09-04 at 12 35 50" src="https://github.com/user-attachments/assets/81d317f2-bb56-4bdf-81d8-5aaa07e4eb4b" />
This update brings Odoo's spreadsheet component up to the latest version, improving day-to-day usability and visual consistency. Users should see smoother undo/redo behavior, more reliable area charts, better font handling on Linux, and colors that better match the rest of Odoo.
Original PR description
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bb7357a197 [REL] 19.5.0-alpha.16 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0)…
### Contains the following commits: https://github.com/odoo/o-spreadsheet/commit/bb7357a197 [REL] 19.5.0-alpha.16 [Task: 0](https://www.odoo.com/odoo/2328/tasks/0) https://github.com/odoo/o-spreadsheet/commit/75ceb30aaa [FIX] Fonts: fix linux font on css variable [Task: 6452045](https://www.odoo.com/odoo/2328/tasks/6452045) https://github.com/odoo/o-spreadsheet/commit/e8d059f38e [FIX] svg: remove unused commented SVGs [Task: 6317134](https://www.odoo.com/odoo/2328/tasks/6317134) https://github.com/odoo/o-spreadsheet/commit/60c210afc2 [IMP] viewports_store: do not jump viewport on UNDO/REDO [Task: 6481352](https://www.odoo.com/odoo/2328/tasks/6481352) https://github.com/odoo/o-spreadsheet/commit/537711e139 [FIX] chart: connect area charts through invalid values [Task: 6458796](https://www.odoo.com/odoo/2328/tasks/6458796) https://github.com/odoo/o-spreadsheet/commit/ea25ccfa4b [FIX] css: update global gray colors to match Odoo [Task: 6515003](https://www.odoo.com/odoo/2328/tasks/6515003) Co-authored-by: Florian Damhaut (flda) <flda@odoo.com> Co-authored-by: Anthony Hendrickx (anhe) <anhe@odoo.com> Co-authored-by: Alexis Lacroix (laa) <laa@odoo.com> Co-authored-by: Lucas Lefèvre (lul) <lul@odoo.com> Co-authored-by: Adrien Minne (adrm) <adrm@odoo.com> Co-authored-by: Ronak Mukeshbhai Bharadiya (rmbh) <rmbh@odoo.com> Co-authored-by: Dhrutik Patel (dhrp) <dhrp@odoo.com> Co-authored-by: Rémi Rahir (rar) <rar@odoo.com> Co-authored-by: Pierre Rousseau (pro) <pro@odoo.com> Co-authored-by: Vincent Schippefilt (vsc) <vsc@odoo.com> Co-authored-by: Marceline Thomas (matho) <matho@odoo.com>
Point of Sale sales details now show both VAT-included and VAT-excluded prices. This makes it easier to distinguish gross sales from net sales amounts for clearer reporting and reconciliation.
Original PR description
We now display both prices VAT included and excluded in order to better distinguish the net sale amount. task-6517995
Users can now download German TSS fiscal exports directly from Odoo instead of using the external Fiskaly dashboard. The DSFinV-K export option has also been moved into the Fiscalization reporting area, making compliance exports easier to find and manage.
Original PR description
In this commit: - Introduce TSS export directly from Odoo, allowing users to download the TSS export without accessing the Fiskaly dashboard. - Move the DSFinV-K export from the Orders menu to the Fiscalization section of the Reporting menu for better organization. Task-6421997
Hong Kong payroll now supports work injury sick leave calculations required under Cap. 282. This helps employers calculate affected leave pay more accurately by accounting for post-accident earnings before applying the sick leave rate.
Original PR description
Implement support for work injury sick leaves as per the Cap. 282. These calculations require some special logic to handle the worked day line calculation; as the rate should be applied AFTER reducing the leave amount by any post accident earnings given to the employee. task-6517522
VoIP time condition periods now use clearer, localized time inputs and include an explicit All Day option. This makes period setup easier and prevents users from getting stuck when correcting invalid start or end times.
Original PR description
Time Condition periods used character fields with manual hour validation. The end time was also hidden until a start time was set, which could leave users unable to correct an invalid period when the start time was cleared. Use the standard float time widget for entering period boundaries and add an explicit All Day option. Keep both inputs on the same line as the option to avoid resizing the period dialog. Format period hours in the list with the same localized representation as the form inputs while preserving the HH:MM values expected by Wazo.
Belgian payroll now reports specific partially paid sick leave and work accident salary codes in the correct tax forms. This helps ensure these payments are taxed and counted correctly in annual and withholding tax declarations.
Original PR description
Some salaries for sick days and work accidents are partially paid (e.g., for short-term contract employees). These salaries should not be declared in forms 281.10 and 274.10, but in 281.18 and 274.18, as they are taxed differently (bonus withholding tax base). Following the previous implementation for LEAVE218, LEAVE219, and LEAVE229, this commit adds the missing work accident codes: - LEAVE271 - LEAVE272 Their categories have been updated to use `REPLACEMENT_REVENUE_BASE` instead of the standard remuneration and withholding bases. These codes are also added to the 281.18 sheet generation to properly compute the number of days. Task: 6482702
The Shopee Shops menu now guides users through the correct setup flow instead of leading to a dead end when creating a shop. Users can choose or create the needed Shopee account before authorizing a new shop, making setup clearer and easier.
Original PR description
The Shopee menu now exposes the shops instead of the accounts, as the shops are what the users work with. However, shops cannot be created manually: they only exist once they have been authorized on Shopee, which requires an account. Clicking "New" on an empty form was therefore a dead end. The "New" button of the Shops list now opens the account creation dialog when no account exists yet, and a wizard otherwise. From that wizard, the user selects the account on which to authorize the new shop, opens that account, browses all the accounts, or registers a new one. Accounts are also identified by their partner ID and API endpoint rather than by their name, so that the account to authorize the shop on can be told apart from the others. task-6487410
Half-day time off entries now appear as wide as full-day entries in the payroll Time Off calendar, making monthly reviews easier to scan. The selection count was also adjusted so selected days are reported correctly in both payroll and regular Time Off views.
Original PR description
In the Time Off step of a payrun, a half day time off was displayed half as wide as a full day one, making the gantt hard to read when scanning a month of time off. Pill width comes from the grid:…
In the Time Off step of a payrun, a half day time off was displayed half as wide as a full day one, making the gantt hard to read when scanning a month of time off. Pill width comes from the grid: the leave gantt declares precision="day:half", so a day spans two grid columns and a morning or afternoon time off covers only one of them. Override the precision to "day:full" on hr_leave_gantt_view_payroll, the primary view used by the payrun Time Off step and by the payroll time off action. A day is now a single column there, so half day and full day time off are displayed with the same width. The Time Off app gantt keeps its half day precision. The multi selection counted the selected grid cells and divided them by 2 to get a number of days. That only holds when a day is two cells, so with the new precision selecting a single day displayed "0.5 selected". Divide by the scale cellPart instead, which is the number of cells in a day: 2 with day:half, giving the same result as before, and 1 with day:full.
Repair orders now move through a shorter, clearer process by removing the unnecessary “Under Repair” step and the related “Start Repair” action. The final repaired status is now labeled “Done,” making the workflow easier for users to understand across repair, manufacturing repair, and point of sale repair scenarios.
Original PR description
This commit improves the repair workflow by: - Removing the `Under Repair` state and its related logic, as it provided no functional value beyond an intermediate state. - Removing the `Start Repair` action, which is no longer needed without the Under Repair state. - Renaming the `Repaired` state to `Done` and updating the tests to reflect the new repair workflow. Enterprise PR:- odoo/enterprise#123736 Upgrade PR:- odoo/upgrade#10739 TaskId-6361476
Manufacturing orders now show planning and status options only when they are relevant, especially when work orders are not used. This reduces confusion for users by hiding unnecessary buttons and filters, showing helpful messages, and keeping order statuses aligned with actual production progress.
Original PR description
*: project_mrp_account This improvement enhances the UX by: - Hiding the `Plan` button on the MO form when there are no work orders. - Ensure the MO state moves to `In Progress` only when the user clicks `Start`, when any work order is in `In Progress or Done` state, or when any component is `picked`. For MOs without work orders, the `To Close` state will never be used. - Display all relevant MO states by default, except the `Cancel` state. For MOs without work orders, the `To Close` state is also not displayed. - Showing a `toaster` when the user tries to plan an MO without work orders or an MO that is already planned. - Hide unnecessary actions, buttons, and filters when the `Work Orders` option is disabled in the settings. - Update the `To Plan` filter to include only MOs with work orders. - Update test cases to maintain consistency with the changes. Enterprise PR:- odoo/enterprise#129971 TaskId-6453469
Odoo now checks self-billed Malaysian e-invoice bill references before sending them to MyInvois. If the reference is over the 50-character limit, users see the issue directly on the Bill Reference field so they can shorten it before submission.
Original PR description
For self billed documents, the bill reference is used as the InternalID (cbc:ID) of the document sent to MyInvois. That field is limited to 50 characters, so a longer reference makes the submission fail with an error coming from MyInvois. Validate the length before sending, so that the issue is reported directly on the "Bill Reference" that needs to be shortened. task-6522168 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The Point of Sale product information popup now shows each product's tags below the product header. This helps staff quickly recognize product categories or labels, with tag colors matching the back-office setup.
Original PR description
In this commit: ================== Product tags were not displayed in the POS product information popup. Display the product tags below the product header and use their configured backend color for the badge background. Task-6484273
Quality control point forms are now clearer and easier to complete, with better title handling, inline options, and helpful placeholders. Work order planning popovers now show key assignment details, helping users understand responsibilities faster.
Original PR description
*= mrp_workorder, helpdesk_repair The improvement includes: - Use a large title input, remove the `New` heading, and display the title next to the reference after creation. - Display the `Apply to` options inline and rename `Quantity` to `Lot` in the `Control per` field. - Improve the QCP `quick create` by using the entered text as the `title` instead of the `reference`. - Add placeholders to the title and failure location fields. - Display the work center and assignee of the work order in the planning popover - Update the tests to reflect the removal of the `Under Repair` state. Community PR:- odoo/odoo#275310 Upgrade PR:- odoo/upgrade#10739 TaskId-6361476
This update tidies the internal organization of Belgian payroll calculation entries so related items are kept together. It has no expected impact on day-to-day payroll use, but helps reduce maintenance errors in future updates.
Original PR description
Two entries in the common localdict were not together. This was probably due to a mistake during a fw-port or rebase.
Belgian payroll now makes lump sum and representation allowances easier to manage by replacing fixed checkbox options with editable allowance fields and clearer categories. This gives payroll teams more flexibility to activate specific allowances, set employee-specific amounts, and calculate prorated allowances more accurately.
Original PR description
For details, see the docs in the related task. As a general ides, this PR aims at simplifying the management of Lump Sum Allowances. We first refactor the Representation Fees section in the Payroll…
For details, see the docs in the related task. As a general ides, this PR aims at simplifying the management of Lump Sum Allowances. We first refactor the Representation Fees section in the Payroll tab of the employee form view by switching from using checkboxes with their related fixed amounts, to using editable fields that have their defaults fixed to those amounts. We then introduce new categories to include a miriad of other possible allowances. Finally, we integrate this with the new view_id system so that each lump sum can be activated/deactivated at will. All Benefits under the Lump Sum Allowances section except for Daily Misc. Other Criteria and Monthly Misc. Other Criteria are considered normal Representation Fees (i.e. with serious standard). Each of them has their own Salary Rule with category SERIOUS_REPRESENTATION, all these values are later grouped (summed) in the Representation Fees salary rule. In the same way, Daily Misc. Other Criteria and Monthly Misc. Other Criteria have their Salary rules with category NON_SERIOUS_REPRESENTATION and are summed to become Representation Fees (Without Serious Standard). Representation fees with serious standard are fixed amounts, while those without serious standard are prorated based on the amount of days in the payslip period that are eligible for representation fees. Some Benefits (namely Homeworking, Phone, Internet, all the Car Management ones and the Daily and Monthly Misc. ones) are only based on the amount set on the employee's profile. The other benefits are based on both the value on the employee profile and a Salary Input on the payslip, that specifies either the distance traveled or the days of outside work depending on the type of benefit. We also have to modify some tests that were failing because they were expecting different rules to appear in the payslip and a threshold to the With Serious Standard amount. Task: 5443155
Payslip forms now show worked day totals that exclude unpaid time, while keeping existing payroll calculations intact. This gives payroll users a clearer view of paid work without disrupting FTE or amount calculations that depend on total worked time.
Original PR description
Rework the previous reverted commit to keep old fields used in FTE and amount of worked_days_line, and add 2 new computed field that only count paid time. Task-6205747
The Sign field list now shows who created each field and provides useful search and grouping options. This helps users quickly find signature fields by name or linked record, and organize them by creator, related record, or allowed user groups.
Original PR description
In the fields list view, there was no way to tell who added a field, and the search bar offered nothing to search or group on. The list now has a "Created by" column, fields can be searched by name or by the record they are linked to, and grouped by creator, linked record, or the groups allowed to use them. task-6480123
The Unplan Orders action is now hidden when the Work Orders setting is disabled. This keeps the manufacturing interface cleaner and prevents users from seeing an option that is not relevant to their current setup.
Original PR description
This improvement hides the Unplan Orders action when the Work Orders option is disabled in the settings. Community PR:- odoo/odoo#282221 TaskID-6453469
AI-generated website pages now get stronger visual direction, more consistent branding, better image handling, and extra polish before users see the final result. The process is split into a separate finishing step to avoid timeouts, making page generation more reliable while improving the quality of the finished pages.
Original PR description
Improves AI-generated page quality, and splits a full-page build in two so it fits the worker time limit. - **Art direction** - new `apply_brand_kit` tool (palette, font pairing, corners/shadows);…
Improves AI-generated page quality, and splits a full-page build in two so it fits the worker time limit. - **Art direction** - new `apply_brand_kit` tool (palette, font pairing, corners/shadows); the prompt now picks an aesthetic direction and layout before writing HTML. - **Refinement passes** - after a page is composed, two one shot passes add section shapes and CSS polish. The LLM returns decisions only, markup is built in Python so rules it ignores can be enforced. - **Snippets** - explicit allowlist with intent hints, shuffled so picks rotate. - **Images** - written as `<img data-ai-image-prompt>` and generated during finalization. - **Deferred finalization** - images and both refinement passes moved to `/ai_website/finalize_page`. Page and reply are held server-side and released together, so only the finished result is shown. **Why split:** `- limit-time-real` (120s) killed the worker, at least on runbot, so image generation, refinement passes are not part of the main loop anymore and are a separate request. worth looking at if another solution would be available
Payroll correction handling has been improved for standard payroll and Belgian payroll processes. This should help payroll teams process correction proofs of concept more reliably and reduce manual follow-up in affected payslip workflows.
The replenishment page now updates more smoothly when users close related pop-up wizards, instead of reloading the whole page each time. This reduces interruptions and helps warehouse teams continue working faster.
Original PR description
Do not refresh the entire orderpoint page every time a wizard is closed. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Belgian payroll declarations now calculate withholding-tax exemptions for eligible overtime hours and apply annual employee caps across the year. This improves compliance and reporting accuracy for companies using Belgian payroll, with updated XLS/PDF reporting and configuration for sector-specific limits.
Original PR description
Compute the withholding-tax exemption for overtime hours (natures 44–59) within the Belgian 274.XX declaration. Overtime worked-day lines are collected from validated payslips, bucketed by rate and sector (CP124/CP302/immovable work), and allocated to the appropriate nature codes while respecting each employee's annual hour cap. Hours already declared in earlier months of the same year are carried forward so the cap is enforced cumulatively. The exemption rate is stored as an updatable rule parameter. A white-cash-register flag on the company controls the higher cap for CP302 employees. New work-entry types, an XLS extra-hours sheet, a PDF section, and extended tests are included. Task Id: 5430988
The barcode app now opens serial and lot number generation in a dedicated screen instead of a pop-up dialog. This makes the workflow easier to use on mobile devices and keeps it more consistent with the rest of the barcode experience.
Original PR description
In the barcode app currently there's a dialog to generate serial/lot numbers. In this PR the dialog gets replaced by a view since it's easier for users on mobile devices. Task-5469775
PayPal in Odoo now supports a wider range of payment methods, including Pay Later, Venmo, card payments, and several local European payment options. The update also adds a smoother seller onboarding flow and standardizes the PayPal checkout experience, helping merchants activate and offer more payment choices globally.
Original PR description
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. task-6090080
PayPal payments now support more payment options, easier merchant onboarding, and the ability for customers to save eligible PayPal Wallet or card details for future use. This helps reduce repeat checkout friction and enables merchants to handle recurring or follow-up payments when PayPal vaulting is enabled.
Original PR description
In recent commits, we integrated various payment methods provided by PayPal, including Advanced Credit and Debit Cards. We also migrated the PayPal Wallet integration from the JS SDK to the Orders API to standardize the appearance of payment methods across different providers. 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-6095033
The Project app search screens have been reorganized and cleaned up to make finding tasks and project information easier. This improves day-to-day navigation across Project-related areas such as timesheets, sales projects, sharing, and skills reporting without changing core business workflows.
Original PR description
In this commit, we refactor and clean the search view of Project. task-6516390
Call activities in the chatter now show the phone number from the related record, making it easier for users to place calls directly. Standard users get a normal phone link, while VoIP users continue to launch calls through the softphone, with shared handling across phone-related features.
Original PR description
[IMP] mail: display call activity phone numbers in the chatter
This was an enterprise VoIP feature: showing the phone number found on
the related record for call activities, in their chatter, and allowing
to call it by clicking on it.
This is now a standard feature. In standard, it is a `tel:` link. In
VoIP, it will still start a call through the softphone, as before.
[IMP] web, mail: merge activity/phone field code into 1 patchable point
The parent commit basically adds a VoIP feature to all call activities:
showing the phone number and being able to call it by clicking... this
is something the phone field widget also does. This commit factorizes
the code and makes it so VoIP can patch both points as an unique patch.
This also allows web_enterprise to patch both at the same time to add
the "Phone Install Dialog", suggesting VoIP installation to admins when
available.
task-6416875This update removes redundant tooltip text from buttons that already have visible labels. It slightly streamlines the interface setup across several Odoo apps without changing what users can do.
Original PR description
*=base_geolocalize,crm,event,l10n_in,mail_group,mrp,project,sale_crm,stock Remove unnecessary "title" attributes from buttons across views where a visible "string" label is present. The button in which string signifies the original purpose does not need title tooltip which adds unnecessary arch overhead without delivering additional value to the user interface. task-6527163 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update improves how Odoo retrieves bus notifications, especially when many notification channels are checked at once. It should reduce delays and server load for real-time updates while keeping behavior unchanged for users.
Original PR description
The `fetch_bus_notifications` method receives a dict mapping channels to be fetched to their `last_fetched_id`, producing several `channel_X = %s and id > %s` OR branches. Since [1], notifications…
The `fetch_bus_notifications` method receives a dict mapping channels to be fetched to their `last_fetched_id`, producing several `channel_X = %s and id > %s` OR branches. Since [1], notifications are fetched by DB, increasing the number of OR branches. Multiple ORs lead to O(n_row * n_groups) complexity as PostgreSQL has to walk through each OR branch for each row. A better approach is to JOIN the groups, which results in an O(n_row + n_groups) complexity: PostgreSQL first builds the hash table then can do a quick lookup for each row. This is an order-of-magnitude win for large batches, with a negligible difference for small ones. [1]: https://github.com/odoo/odoo/pull/278597 ------ Benchmark code, explain analyze for each case + plots: [benchmark.zip](https://github.com/user-attachments/files/31776770/benchmark.zip) Comparing old approach vs new approach with a growing amount of groups passed to `fetch_bus_notifications` on a 30k rows bus table. Median time over 50 run per batch. <img width="400" alt="bench_no_index" src="https://github.com/user-attachments/assets/e8c8dbee-ed1a-4941-867c-9ac0f251693a" />
This update adds a dedicated checker to catch risky database query patterns that could lead to SQL injection vulnerabilities. It helps Odoo maintain stronger internal code quality controls while preparing to remove a broader legacy linting dependency.
Original PR description
New linter for sql-injection. The goal is to replace the pylint implementation by a specialized and stricter implementation so that pylint can be removed entirely in https://github.com/odoo/odoo/pull/257457. Findings of this linter are covered in https://github.com/odoo/odoo/pull/282652. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Timesheet and invoice analytic records now automatically fill in missing sales and product details from related information. This makes reporting and grouping by product or sales order item more accurate for sales and service teams.
Original PR description
Analytic lines are missing two direct links that could be inferred from existing information: a timesheet has a sales order item and no product, and the analytic entries of an invoice have a product and no sales order item. With this PR, each side is filled in from what is already known Task-6486240
Customer lists now show reminder levels and include filters for overdue customers and reminder status. This helps teams quickly identify which customers need follow-up and prioritize collection activity.
Original PR description
- add reminder level column in partner list views - add overdue filter in partner search view - add reminder level in custom filters see odoo/enterprise#128176 task-6462889
The tooltip for the plus button in the Work Orders planning Kanban view now says "Plan Work Order" instead of "Quick add." This makes the button's purpose clearer for manufacturing users and helps reduce confusion when planning work orders.
Original PR description
- Changed the 'Quick add' tooltip to 'Plan Work Order' for the '+' icon in the Work Orders planning Kanban view, making it clearer to users that the action is used to plan a work order. Task ID - 6515112 Enterprise PR: https://github.com/odoo/enterprise/pull/129793
The CRM team switcher is easier to use, with simpler team names and a new default option to view all sales teams. It now appears whenever multiple sales teams use opportunities, making it more consistent and less dependent on configuration settings.
Original PR description
Purpose ======= Improve the usability of the crm team switcher. Specification ============= 1) Removing the "Pipeline" prefix from the switcher title. Users will get that it's the specified team…
Purpose ======= Improve the usability of the crm team switcher. Specification ============= 1) Removing the "Pipeline" prefix from the switcher title. Users will get that it's the specified team pipeline. 2) The "multi-memberships" settings shouldn't impact the switcher visibility anymore. The team switcher is now visible as soon as there's at least 2 teams using opportunities in the DB. NB: The teams actually displayed in the switcher could be a subset of those depending on the current user rights. 3) Adding an "All Sales Teams" option at the top of the team switcher acting as default. The switcher will fallback to it when no team has previously been selected or when the previously selected team cannot be found. Selecting it will remove the team id filter from the domain and remove the "default_team_id" context key from the context. With this scenario, the default team on record creation will be set by the crm.lead "team_id" field compute which will call "_get_default_team_id" from the sales_team module. Task-6485445
The Saudi Arabia accounting template has been reorganized to use a clearer six-digit account numbering structure. This makes the chart of accounts easier to navigate, removes duplicate or obsolete entries, and leaves room for future account additions without disrupting the order.
Original PR description
Restructure the Saudi Arabia chart of accounts to follow the standardized 6-digit numbering convention adopted across recent localizations (account group / subgroup / identifier), reorganizing account ordering for a more logical flow within each category and leaving spacing between codes so new accounts can be inserted later without disrupting the sequence. - Removed 9 obsolete/duplicate accounts (incl. duplicate Withholding Tax Payable) - Added 30 new leaf accounts and 19 new parent/header accounts - Re-mapped codes for all retained accounts while preserving their external ids Related PR: https://github.com/odoo/upgrade/pull/11120 https://github.com/odoo/enterprise/pull/128987 task-6390722
Phone numbers on activities are now available more broadly, so users can click to call even when VoIP is not installed. When VoIP is installed, the calling experience stays consistent across activity links and phone fields, with fixes for mobile and desktop phone link behavior.
Original PR description
See community PR for summary of the feature: https://github.com/odoo/odoo/pull/281277
task-6416875Website editors now see clearer tooltips explaining font weight choices and how multiple form requirement settings work together. The website builder color picker also displays its hex input with the correct light styling in edit mode, improving readability while editing.
Original PR description
**[IMP] website: clarify builder option tooltips** Clarify (with tooltips) font weight settings and how multiple form requirement values are combined. ---------------- **[FIX] html_builder, html_editor: fix color picker hex input** Before this commit, the `hex` color input was dark in Website edit mode. After this commit, it uses the light color defined by the builder. task-6259086 Forward-Port-Of: odoo/odoo#282923
Several buttons across accounting, databases, payroll, marketing, planning, rental CRM, and barcode screens were simplified by removing redundant hover text where the button already has a visible label. This keeps the interface lighter without changing what users can do.
Original PR description
*=databases,l10n_be_hr_payroll,marketing_automation,planning,sale_renting_crm,stock_barcode Remove unnecessary "title" attributes from buttons across views where a visible "string" label is present. The button in which string signifies the original purpose does not need title tooltip which adds unnecessary arch overhead without delivering additional value to the user interface. task-6527163
Customer lists now show reminder levels and include filters for overdue accounts and reminder status. This helps teams quickly prioritize follow-up work and identify customers needing attention without extra manual checks.
Original PR description
- add reminder level column in partner list views - add overdue filter in partner search view - add reminder level in custom filters see odoo/odoo#282886 task-6462889
Hong Kong payroll salary rules now distinguish non-taxable reimbursements and deductions from taxable ones. This makes payroll entries easier to understand and ensures non-taxable deductions are correctly subtracted from net pay.
Original PR description
The CAP57 structure has two reimbursement and two deduction rules, one pair taxable and one not, all named "Reimbursement" and "Deduction". Rename the non-taxable pair accordingly for clarity. Also compute the non-taxable deduction in Python so it is negated, as the DED category is added to NET. task-6263356
Saudi payroll accounting defaults now align with the redesigned local chart of accounts and its standardized numbering. Medical insurance and Iqama/work permit payroll credits are assigned to more specific prepaid accounts, improving financial classification and reporting accuracy.
Original PR description
- In the related PR, we redesign the Saudi Arabia chart of accounts to follow the standardized 6-digit numbering convention. - Following that re-sequencing, this PR splits the Medical Insurance and Iqama/Work Permit rules' credit account from the old Prepaid Employee Expenses account to the new Prepaid Medical Insurance and Prepaid Sponsorship Fees accounts. Related PR: https://github.com/odoo/odoo/pull/284216 https://github.com/odoo/upgrade/pull/11120 task-6390722
The work order planning view now uses default filters that match the Kanban view. This gives manufacturing teams a more consistent experience when switching between planning and Kanban views.
Original PR description
- Updated the work order planning filter to align with the default filters in the Kanban view. Task ID - 6515112 Community PR: https://github.com/odoo/odoo/pull/285566
The Philippines VAT registration setting has been moved from Enterprise reporting into the core Philippines localization so it can be reused by new official invoice reporting. Existing BIR 2306 and 2307 PDF exports continue to use the same setting without requiring business users to change their workflow.
Original PR description
`l10n_ph_is_vat_registered` lived in `l10n_ph_reports`, but the new BIR CAS invoice report added to core `l10n_ph` also needs it, and core cannot depend on an enterprise module. Move the field and its view exposure to core `l10n_ph`, which `l10n_ph_reports` already depends on, so the BIR 2306/2307 PDF exports keep working unchanged against the same field/column. Community PR: https://github.com/odoo/odoo/pull/282405 Upgrade PR: https://github.com/odoo/upgrade/pull/11029 task-6032311
Before, confirming a purchase order automatically created a vendor pricelist (product.supplierinfo) for every product/vendor without one, silently locking the first purchase price in as pricelist. In industries with constantly fluctuating prices (e.g. oil), purchasers do not negotiate pricelists, they simply apply the last price communicated by the vendor. For them, the pricelist automatically created on order confirmation was outdated by the next price change, and maintaining pricelists could be tedious. Now vendor pricelists are only created manually. When no pricelist is defined for a product/vendor, the most recently confirmed purchase order line acts as the vendor pricelist. Additionally, the purchase history / price comparison view gains an optional 'Discount %' column, and is grouped by vendor by default. _select_seller now returns the seller information as a dictionary instead of a product.supplierinfo record, since a seller can come from the last confirmed purchase order line, which has no record. task-5456444