Wednesday, October 25, 2023
56 changes · master
Enhancements to existing features
Website administrators can now add a new language directly from the theme settings, opening the language setup wizard from the same place they manage website appearance. Language display options are simplified when only one language is available, with improved defaults and new display choices that better support responsive website layouts.
Original PR description
This adds a button to add language in theme tab. When clicked, opens the "add a language" wizard. If the website has only one language, the options to enable language in header & footer are hidden. When a user add a language, the default behavior is Header : dropdown & Footer : inline. Inline mode for the header is no longer accepted for responsive reason. Also provides two more rendering options : Language Code and Flag + Language Code. task-3457554
Project users can now filter the Gantt view to quickly find tasks with scheduling conflicts. This makes it easier to spot and resolve planning issues without manually scanning all tasks.
Original PR description
Before this commit: no filter for conflict tasks After the commit: a filter is added for conflict task task- 3514831
Spanish tax template data has been clarified and updated, including new or adjusted tax definitions where needed. This should reduce confusion for companies using Spanish localization and improve consistency in electronic tax reporting setup.
Original PR description
Changes for taxes in template data were requested because they were confusing or new taxes needed to be created. List of changes applied: https://www.odoo.com/web#id=3395186&menu_id=4720&cids=1&action=333&active_id=967&model=project.task&view_type=form --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Improves the experience of creating website pages from templates by making more content blocks show accurate previews while dragging or selecting them. It also cleans up related setup code and avoids unnecessary external map loading during tests, making the feature more reliable without changing the core page-building workflow.
Original PR description
This PR contains multiple improvements related to new page from template: - generalize default content for blocks so that they also appear during drag'n'drop (instead of patching them specifically so that they work for the "new page" feature) - simplify code: remove double dialog opening guard, remove async Promise executor - remove some useless XML in templates Related: https://github.com/odoo/design-themes/pull/726 task-3555325
Users can now manage notification behavior separately for each Discuss channel, including muting channels for a chosen period or limiting alerts to mentions. This helps reduce noise while keeping important messages and action counters visible.
Original PR description
New fa-bell icon to manage notifications according to that channel only Options: Mute (+choose time period): No longer see the unread status: the bold text disappears and the channel name fades out. As if you are not a channel member anymore. Receive messages but without sound + only need action counter (grayed). Add a crossed-out bell icon next to the channel or user name to indicate that the channel is muted All messages: all messages sound + need action counter @Mentions: only mention sounds + need action counter Nothing (Discord-like): No sound + need action counter By default: all messages task-3328665 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This update reorganizes part of the sales and stock workflow so rental-related deliveries can be supported more cleanly. It is an internal improvement that helps prepare the system for better rental picking behavior without changing day-to-day screens for most users.
Original PR description
Refactored _action_launch_stock_rule to create _create_procurement_group. Needed for rental pickings. task 3109952 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo no longer uses a separate down payment product or related settings, reducing setup complexity and avoiding errors from treating down payments like regular products. Down payments now follow consistent tax and accounting behavior across Sales and Point of Sale, improving fiscal accuracy.
Original PR description
- Removes down payment products and it's related settings. - Previously one down payment was created per tax(es), now it's one dp per tax(es)/account combo. - Align POS down payment behavior on SALE Enterprise: https://github.com/odoo/enterprise/pull/46978 Upgrade: https://github.com/odoo/upgrade/pull/5317 Task 3254314
The Print Labels option now appears only for products where labels are relevant: storable and consumable items. This reduces confusion by hiding the option for non-physical products such as event tickets, booths, or courses.
Original PR description
Before this commit, the "Print Labels" button shows for all products except services. However, this button does not make sense for event_booth, event_ticket, course, ... products So we only show this button for storable and consumable products. Task-3390587
Website editors can now apply customizable highlight effects to selected text, replacing the older underline toggle with a richer highlight menu. This makes it easier for users to emphasize key content visually, with controls for highlight style, color, and thickness directly in the editor.
Original PR description
The goal of this PR is to replace the "Toggle underline" option [1] from the website's text editor by a new "Highlight effects" option which should allow applying some highlights on the selected text…
The goal of this PR is to replace the "Toggle underline" option [1]
from the website's text editor by a new "Highlight effects" option which
should allow applying some highlights on the selected text and setting
their color & thickness.
For this purpose, the JS code used for text animations will be updated
to be more generic and handle text highlights too. Moreover, The "Text
Highlight" options will be applied by adding a SVG to the targeted text
element (allowing to adjust their `stroke` and `stroke-width`).
To simplify adapting highlights when the text content is updated,
we follow this generic structure:
```XML
<span class="o_text_highlight">
<span class="o_text_highlight_item">
line1-textNode1 [line1-textNode2,...]
<svg.../>
</span>
[<br/>]
<span class="o_text_highlight_item">
line2-textNode1 [line2-textNode2,...]
<svg.../>
</span>
...
</span>
```
Rendered line breaks in text nodes are detected using range client
rectangles (see: `text_processing.js` > `splitNodeLines()`), and the
highlights are updated on window resize...
We also need to adjust highlight SVGs to fit an updated text in "edit
mode" (mainly using editor's commands), a `MutationObserver` is used
for this purpose (we only redraw the SVG for each text unit).
A simple SVG path generator was implemented in this PR (see:
`text_processing.js` > `drawPath()`) to build highlights. It applies a
list of SVG path commands according to text dimensions in a specific
mode (E.g. on "pattern" mode, we repeat the same elementary path to fit
targeted text node...).
Remarks:
- The `--text-highlight-width` and `--text-highlight-color` properties
are used to control the highlight effect's thickness and color.
- We build the highlight option preview in the same way as text content.
To achieve this, a hack was used (we open the `<we-select/>` first since
we need the right `getBoundingClientRect()` dimensions to correctly draw
highlight SVGs).
[1]: Also, the text editor "Toggle strikethrough" option will be moved
to the list of highlight effects in the new option.
task-3285817 (rd-website)
task-3269759 (rd-design)
Co-authored-by: Chrysanthe(CHGO) chgo@odoo.comOdoo’s website headers have been redesigned with a new set of layout choices and configurable elements such as social links, calls to action, and header text. Mobile navigation is simplified around an off-canvas layout with new alignment options, helping businesses create more modern and consistent website experiences across devices.
Original PR description
This PR redesigns all headers and improves and adapts some related features. **New Header redesigns:** All previous header designs have been removed in favor of the new redesigned set of headers.…
This PR redesigns all headers and improves and adapts some related features. **New Header redesigns:** All previous header designs have been removed in favor of the new redesigned set of headers. **New Elements feature:** This new feature allows the user to select the elements he wants to display in the header (e.g. social links, call to action, ...) **Mobile menu feature:** Since we decided to keep the mobile version with an "off canvas" layout, the Mobile Menu feature has been removed. **Alignment feature:** This feature has been adapted to match the new headers. **Mobile Alignment Feature:** Since the mobile header layout is always "off canvas", this feature allows the user to choose the menu alignment for the mobile version. Requires: - https://github.com/odoo/design-themes/pull/651 - https://github.com/odoo/upgrade/pull/5214 task-3060986 task-3474743 Co-authored-by: Brieuc-brd [brd@odoo.com](mailto:brd@odoo.com) Co-authored-by: robinlej [role@odoo.com](mailto:role@odoo.com) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The media dialog now keeps a stable size while images and documents load, making it easier for users to browse without accidental clicks or unexpected scrolling. Clearer scrolling and loading indicators, plus a disabled Add button until media is selected, help users understand what action is available next.
Original PR description
When using the media dialog, the dialog always seems glitchy as its size is always changing with the loading files. This behavior is not really convenient as it can make the user click on unwanted…
When using the media dialog, the dialog always seems glitchy as its size
is always changing with the loading files. This behavior is not really
convenient as it can make the user click on unwanted images. Another
"issue" of the current media dialog is that when loading more images,
the dialog auto-scrolls to the "Load More" button, which can make the
user miss new images and he therefore needs to revert the scroll. A last
issue encountered by the users is that some of them think that the "Add"
button in the footer is used to upload files from their device, while it
only adds the selected media to the page.
This commit improves the UX of the media dialog:
- The dialog height is now fixed and has the same size as when it is
fully filled by images.
- The top bar with the search input now stays at the top when scrolling.
- There is now a small footer under the attachments (for the Images and
Documents tabs only) and containing the following:
- When there is content to scroll, a small circle with an arrow that
scrolls one row when clicking on it.
- When there is nothing to scroll, the "Load More" button which will
load more images. When new images are loaded, if we can scroll, the
small arrow is displayed again.
- When there is nothing to scroll and to load anymore, the "All
images/documents have been loaded" text.
Note that the main goal of this footer is simply to indicate to the user
when there is still content to scroll and when he can load more files.
In order to solve the "Add" button issue, this commit also enables and
disables this button, depending on whether some media are selected:
- if a media is already selected, we can click on the button;
- if not, the button is greyed out and we cannot click on it.
task-3441587Journal item reconciliation identifiers were simplified to make accounting navigation and matching clearer. Full matches now use simpler numeric references, while partial matches use a consistent P-based format, reducing reliance on sequence setup.
Original PR description
This commit contains some misc improvements based on the 16.0 overall improvements regarding navigation and Journal Items
in account.full.reconcile, 'name' field has been removed, and the replacement for matching_number will be the SQL id instead (no more sequences)
For full reconciliations, the matching number now don't have an 'A' prefix
For partial reconciliations, the matching number will have a format of 'P{id}'
community-PR: odoo/odoo#138140
enterprise-PR: odoo/enterprise#48980
task-id: 3530458Projects can now mark timesheets as manually billable even when they are not linked to a specific sales order line. This helps businesses handle shared services such as training sessions more accurately, so consultant time can be tracked and reflected correctly in billing and reporting.
Original PR description
**Before this commit:** An internal use case of training cannot be handeled with the current ux. Basically, training is sold to customers. It is given by a consultant who needs to timesheet their time. With the current implementation, each training would generate 1 SO per customer per training. This makes it impossible to timesheet because the consultant cannot split nor multiply their time per person attending the training. Because of that, timesheets cannot be billable which leads the reporting to be inaccurate. **After this commit:** A billable project has an option 'billable manually', its timesheets are considered billed manually when the option is set. task-3565762
Several user-facing buttons, actions, and notifications have been reworded across Discuss, Web, Calendar, CRM, and related tour screens. This makes common actions such as leaving conversations, deleting filters, stopping synchronization, and assigning leads easier to understand and reduces ambiguity for users.
Original PR description
This PR changes the wording of actions and notifications in the modules listed below: 1) Discuss (Leave Conversation) 2) Web (Delete Filter, Get View - Close, Tours - Close and property field access warning) 3) Calendar (Stop Synchronization, Configure, and Discard) 4) CRM (Assign Leads) 5) POS (replaced `this.env._t` with `_t`) **Task**-3390780
The invoicing flow from Projects is clearer, with updated warning messages when required conditions are not met. Sales order lines now show the related company alongside an individual customer, making it easier for users to recognize the correct customer before invoicing.
Original PR description
This commit's purpose is to ease the the flow of invoicing from the project app. The warning message when the user tries to invoice without fulfilling the condition has been updated. When the customer of an SOL is a person and belongs to a company, the company is now also shown on the sol, in addition of the name of the customer. The idea is that the user is more keen to recognize the company than just the name of the person. task-3251615
Currency exchange rates are now cached for the duration of a transaction, reducing repeated database lookups when many conversions are processed. This should improve performance in accounting, sales, projects, and related workflows without changing normal user behavior.
Original PR description
Most of the time, rates are computed in a loop by using `<res.currency>._convert`. This leads to a lot of round trips with the database. This PR is caching the value for a whole transaction. In order to do that, the non stored field `rate` has new (missing) contextual dependencies: the arguments of `_get_conversion_rate`. This allows to move the actual computation of the rate to the computed field, and `_get_conversion_rate` is now only a proxy to avoid playing with the context manually; also kept for backward compatibility. Other solutions were considered: * `ormcache`, but we want to avoid creating multiple caches and reduce the possibility to have inter dependent caches. * managing a local cache everywhere, which is cumbersome and error prone * a helper for the previous option by using a converter factory, but it is still an issue when the convert function is called from multiple call functions because the cache isn't shared then.
The customer portal has been redesigned with a fresher look, clearer cards, pictograms, and layouts that adapt better across screen sizes. This improves consistency with the newer Odoo backend and makes important portal information easier for customers to scan and use.
This update removes an older internal error-handling helper and replaces it with standard handling across several Odoo apps. It helps make browser-side errors more consistent and easier to maintain without changing business workflows.
Original PR description
This commit removes the promise extension which added the function `guardedCatch`. It was used to filter server and connection errors from javascript errors. Instead of using guardedCatch, we should use catch and check if the reason is a server or connection error if needed and re-throw the error if it's not handled. task: 3439226 Enterprise: https://github.com/odoo/enterprise/pull/48451
Odoo can now better process field visibility and editability rules that use set comparisons, supporting recent changes to how these rules are written. This helps views validate correctly and makes these conditions easier to edit in tools such as Studio.
Original PR description
The PR https://github.com/odoo/odoo/pull/104741 have recently modify how the modifiers required, readonly,
invisible, and column_invisible are defined. They are now given by Python expressions instead of domains. This will require at some point to migrate domains like [("user_ids", "in", [1, 2])] to equivalent Python expressions. For simplicity, we have chosen to translate those kind of domains using set intersections. For the last example, we get "set(user_ids).intersection([1, 2])".
In the present PR, we
- make py_js support sets and some basic set operations (e.g. intersection) (second commit)
- make easy the edition of simple set intersections in the ExpressionEditor (third commit)
- allow views to be validated if they contain fields attributes involving sets (fourth commit). This is useful in Studio for
example.
Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com>
Co-authored-by: Christophe Matthieu <chm@odoo.com>New restaurant point-of-sale configurations now start with a default floor plan and one table, making setup faster for restaurant users. Demo and test data are adjusted so this default setup does not interfere with existing sample scenarios or automated checks.
Original PR description
In this commit a new default floor plan is added along with one table when creating a new restaurant pos_config. It ensures that the default floor is removed for the demo data and for the tests.
This change simplifies warehouse picking by combining reserved and picked quantities into one field and adding a clear picked/not picked marker. It reduces confusion for users during stock operations while ensuring the system does not overwrite quantities that staff have already confirmed as picked.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can now change how product documents are shown to customers directly from the kanban view, without opening each document form. This makes document visibility management faster for sales and website teams working with product pages.
Original PR description
Currently, users who want to change the visibility of product's documents need to open their form view and edit it. This new widget allows users to quickly edit the way a document is displayed to their customers from the product's documents kanban view.
Analytic reporting now lets teams assign and compare values across multiple plans, such as country and product type, on the same accounting line. This makes pivot reports more flexible and gives businesses clearer cross-dimensional insight into costs and revenue across companies.
Original PR description
Purpose ======= Make it possible to compare analytic values between plans by inputting up to one account per plan on each line. For instance, if we have 2 plans: "Country" and "Product Type", with…
Purpose ======= Make it possible to compare analytic values between plans by inputting up to one account per plan on each line. For instance, if we have 2 plans: "Country" and "Product Type", with the following accounts | Country | Product Type | | ------- | ------------ | | BE | Drinks | | LU | Food | And the following invoices: * 1000€ of drinks in Belgium * 2000€ of food in Belgium * 3000€ of food in Luxemburg We want to be able to display the following pivot tables: | | Drinks | Food | Total | | --- | ------ | ---- | ----- | | BE | 1000 | 2000 | 3000 | | LU | 0 | 3000 | 3000 | | Tot | 1000 | 5000 | 6000 | | | Total | | ------ | ----- | | Food | 5000 | | * BE | 2000 | | * LU | 3000 | | Drinks | 1000 | | * BE | 1000 | | Total | 6000 | Implementation ============== * Each analytic plan corresponds to one field on `account.analytic.line` * The fields are added dynamically in the views. * `account.analytic.plan` doesn't have a `company_id` field anymore, meaning that all the companies have access to all the plans. This means that the applicability fields and lines are now company dependent, and those can be used to know which fields/plans to display for which company. * There can no longer be one "Project" plan per company, even if the accounts of that project can still be owned by only one company. * There is now only one method to get the default (or "Project" plan), which is `_get_plan_columns` task-3497653
Peppol invoice handling now uses clearer business statuses, making it easier to see whether invoices are ready, queued, pending, completed, canceled, or in error. Sales journals and customer invoice screens also gain shortcuts and filters to quickly find invoices ready to send, while demo-mode sending and phone number prefill are improved.
Original PR description
# Invoice states Structure `peppol_move_state` according to the following logic: 1. Ready to Send / Invoices confirmed addressed to partners that are Peppol valid and not in one of the other…
# Invoice states Structure `peppol_move_state` according to the following logic: 1. Ready to Send / Invoices confirmed addressed to partners that are Peppol valid and not in one of the other statuses. Default behavior upon posting such an invoice. 2. Queued / In case of asynchronous sending only, the instruction to send has been given via the Send & Print but the cron wasn't run yet. It is still possible to cancel the sending. 3. Pending Reception / Too late to cancel, synchronous or asynchronous sending makes it now impossible to cancel the sending 4. Canceled / Once asked explicitly by the user. It's instant. 5. Done / Upon confirmation or delivery received from the AP 6. Error / Upon confirmation of a notification of error received from the AP # Journal Dashboard Add an action on sale journals to open invoices that are ready to be sent via Peppol # Other improvements - Peppol ready filter in Customer Invoices view - Rename `PEPPOL state` to `Peppol status` for consistency - Pre-fill valid phone numbers in `account_peppol_phone_number` field - Fix async sending in demo mode --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Free self-service orders are now automatically marked as paid when customers are set to pay after each order. This prevents checkout confusion and avoids validation errors when a zero-value order has no payment method selected.
Original PR description
*: pos_online_payment_self_order,pos_restaurant,pos_self_order Previously, when self order was set to "pay after each" and a user ordered an order with a total of $0.00, the order was not automatically set to paid status, as is the case with point_of_sale. Now, when the self order is set to "pay after each" and an order with a total of $0.00 is placed, it will be automatically paid. Minor fixes: - A props has been removed from `ReceiptHeader` because it was causing an error in debug mode. - In point_of_sale, when an order was placed with a total of $0.00, an error was raised during validation because no payment method was selected. Now, before checking this payment method, we first check whether it exists.
This update adds extra information fields used when importing industry-specific modules. It helps Odoo better recognize and handle these modules during import, making module management more complete and reliable.
Original PR description
Description of the issue/feature this PR addresses: Current behavior before PR: Desired behavior after PR is merged: --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
This change makes it simpler to define products and their variants directly in XML data files. It reduces the need for complex technical workarounds when preparing product catalogs, making setup and module data maintenance more reliable.
Original PR description
before this commit: =================== you can not create xml record for product.template and product.product and link them for same product if you like to achieve it you need to do it like ```…
before this commit:
===================
you can not create xml record for product.template and product.product and link them for same product if you like to achieve it you need to do it like
```
<record id="product_template_1" model="product.template">
<field name="name">Box</field>
.
.
.
<field name="list_price">8000.0</field>
</record>
<record id="product_template_attribute_line_1" model="product.template.attribute.line">
<field name="product_tmpl_id" ref="product_template_1"/>
<field name="attribute_id" ref="product_attribute_color"/>
<field name="value_ids" eval="[(6, 0, [ref('product.product_attribute_value_1'), ref('product.product_attribute_value_2')])]"/>
</record>
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'product.product_template_attribute_value_1',
'record': obj().env.ref('product.product_template_attribute_line_1').product_template_value_ids[0],
'noupdate': True,
}, {
'xml_id': 'product.product_template_attribute_value_2',
'record': obj().env.ref('product.product_template_attribute_line_1').product_template_value_ids[1],
'noupdate': True,
},]"/>
</function>
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'product.product_product_red',
'record': obj().env.ref('product.product_template_1')._get_variant_for_combination( obj().env.ref('product.product_template_attribute_value_1')),
'noupdate': True,
}, {
'xml_id': 'product.product_product_4b',
'record': obj().env.ref('product.product_template_1')._get_variant_for_combination( obj().env.ref('product.product_template_attribute_value_2')),
'noupdate': True,
}]"/>
</function>
```
after this commit:
==================
you can create product.tempalte and product.product from xml file and link it manully by attribute value
like
```
<record id="product_template_1" model="product.template" context="{'create_product_product': False}">
<field name="name">Box</field>
.
.
.
<field name="list_price">8000.0</field>
</record>
<record id="product_template_attribute_line_1" model="product.template.attribute.line" context="{'create_product_product': False}">
<field name="product_tmpl_id" ref="product_template_1"/>
<field name="attribute_id" ref="product_attribute_color"/>
<field name="value_ids" eval="[(6, 0, [ref('product_attribute_value_blue'), ref('product_attribute_value_red')])]"/>
</record>
<record id="product_template_attribute_value_1" model="product.template.attribute.value">
<field name="attribute_line_id" ref="product_template_attribute_line_1"/>
<field name="product_tmpl_id" ref="product_template_1"/>
<field name="attribute_id" ref="product_attribute_color"/>
<field name="product_attribute_value_id" ref="product_attribute_value_blue"/>
</record>
<record id="product_product_blue" model="product.product">
<field name="product_tmpl_id" ref="software_reseller.product_template_1"/>
.
.
.
<field name="product_template_variant_value_ids" eval="[(6, 0, [ref('product_template_attribute_value_1')])]"/>
</record>
<record id="product_template_attribute_value_2" model="product.template.attribute.value">
<field name="attribute_line_id" ref="product_template_attribute_line_1"/>
<field name="product_tmpl_id" ref="product_template_1"/>
<field name="attribute_id" ref="product_attribute_color"/>
<field name="product_attribute_value_id" ref="product_attribute_value_red"/>
</record>
<record id="product_product_red" model="product.product">
<field name="product_tmpl_id" ref="software_reseller.product_template_1"/>
.
.
.
<field name="product_template_variant_value_ids" eval="[(6, 0, [ref('product_template_attribute_value_2')])]"/>
</record>
```
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-prThis update removes confusing internal details from some access-related error reports. It helps support and technical teams see the real cause of a problem faster, without misleading cache-related messages in the traceback.
Original PR description
Currently if a record is not in the cache it raises a `CacheMiss` the handling of which leads to loading the record from the database (or something). If an issue occurs during that loading, because the loading is an `except` scope the cache miss gets linked with the new one via > During handling of the above exception, another exception occurred: This is both noise (the cache miss is not actually relevant) and misleading, because the wording makes it look like an unrelated error occurred during handling. - move the loading of the record out of the `except` to limit the scope of the `KeyError` and avoid "inheriting" it - try to `from None` a few specific errors to remove implicit linkage, as the new error should have all relevant information, the key error / cache miss is just an implementation detail
Product properties now live at the general product template level instead of on individual product variants. This aligns property management with how products are structured, reducing confusion between variant attributes and product-level properties.
Original PR description
Purpose: --------- [This commit]( https://github.com/odoo/odoo/commit/70043822103638f651a521bd2da36cfdfd86245e) added the properties field on the product.product template. However, the product.template model is more suitable to hold these properties as the product.product model already has attributes which are quite similar to properties. Task-3570286
The customer portal order details page is being aligned with subscription flows, making it easier to reuse and extend across sales and subscription-related experiences. It also improves how editable order lines and discounts are handled when customers adjust options, supporting a smoother self-service process.
Original PR description
- Refactor the "details" part of the portal view to unify with subscription as well as add different id "hooks" for inheritance. - Add function to allow line editability to be overriden. - fix: allow the discount computation to be triggered when adding an option line if the option line doesn't already have a discount. task-id : 3186629 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Accounting dashboards now guide users more directly to bills that need payment or are overdue. The updated journal item views, filters, and column layout make it easier to review due dates, discounts, and register payments for multiple items.
Original PR description
Description of the issue/feature this commit addresses: Currently, the payment registration for vendor bills is kinda hard to figure. Noticing which bills are overdue, which require a payment is not…
Description of the issue/feature this commit addresses: Currently, the payment registration for vendor bills is kinda hard to figure. Noticing which bills are overdue, which require a payment is not made so easy by the interface and could be improved. Also there is no way to register a payment for multiple lines at a time which could improve the UX. --- Desired behavior after the commit is merged : On the dashboard, all the buttons in the "Customer Invoices" and "Vendor Bills" have been renamed to remove the "Invoices" and the "Bills" inside them. The buttons "Bills to Pay" and "Late Bills" which now are "To Pay" and "Late" (see above) redirect to the Journal Items with specific filters to show only the necessary lines. The order of the columns in the Journal Items has been changed and their visibility has been changed too. The default filters of the Journal Items when coming from the dashboard buttons has been changed. Payable has been replaced by Purchases. Filters, Group by and Search by options have been added for the Due Date and the Discount Date fields in the Journal Items. --- task-3516496 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can now select multiple vendor bill journal items and register payments for them in one flow, reducing manual effort. Aged Payable report amounts are clickable and open the related journal items, making it easier to identify overdue bills and act on them.
Original PR description
Description of the issue/feature this commit addresses: Currently, the payment registration for vendor bills is kinda hard to figure. Noticing which bills are overdue, which require a payment is not made so easy by the interface and could be improved. Also there is no way to register a payment for multiple lines at a time which could improve the UX. --- Desired behavior after the commit is merged : This commit makes it now possible when in the Journal Items to select multiple lines and register a payment for them which would create one payment per line selected. When inside the Aged Payable report, all amounts are clickables and send the user to the Journal Items with the proper filter to see what lines are part of that amount. When in the Journal Items, the "Create Asset" option was available in two places. It has been removed from the drop-down "Actions" button and kept in the header. --- task-3516496
Customers can now manage more subscription actions directly from the portal, including renewing, changing quantities, and closing subscriptions when allowed by the business. The subscription portal is also aligned with the sales portal experience, making access and navigation more consistent.
Original PR description
- Inherit portal view from sales: Make the subscription portal_view inherit from sales instead
of reimplementing from scratch.
- self-service portal:
+ Add self-service option to the subscription portal. 3 Settings can be set up on the sale order template:
+ user_extend : Allow the user to create renewal order for his subscription
+ user_quantity : Allow the user to modify the line quantity of subscription before the first invoice or create an upsell if the subscription has already been invoiced.
+ user_closalble : Allow the user to close the subscription.
- Make Pause pause again!
- Change the url of subscription from `/my/subscription/<access_token>` to `/my/subscriptions?access_token=<access_token>`
- Cleanup
3186629Users now see a specific message when a Codabox connection cannot be recreated because consent still exists on Codabox's platform. This helps them understand that they must manually revoke the consent in Codabox before trying again, instead of seeing a generic error.
Original PR description
Steps to reproduce: - Create a first connection with Fidu Vat and Company Vat - Revoke it - It is correctly deleted from IAP - However the consent still exists on Codabox. - A generic error was presented to the user Now we display a specific error message to the user so that it can revoke its consent from Codabox's platform. Codabox does not provide an API for us to do it for the user, it must do it manually.
The timesheet app now includes billing time targets for most demo employees, so the billing leaderboard displays meaningful sample data. The update also improves the leaderboard header layout and places related settings in the correct category, making demos and configuration clearer.
Original PR description
This PR adds a billing time target for most demo employees, as without it, they don't appear in the billing leaderboard. It also fixes a small visual bug related to the leaderboard: the timer header doesn't have a fixed height when the leaderboard is activated depending on whether or not there is data for it. Task-3570491
Deferred reports no longer show comparison options that can create misleading, non-contiguous period results. This helps users avoid confusing totals and makes deferred report figures easier to interpret.
Original PR description
We hide these comparison filters because in the case of deferred, we want to work with contiguous periods. Comparing with non-contiguous periods may result in weird behaviours such as: 1. Non-contiguous period Total = 1200 to defer from 1/1 to 12/31 Reference period = Sept Comparison with Feb | Total | Before | Feb | Sept | Later | |-------|--------|-----|------|-------| | 1200 | 100 | 100 | 100 | 300 | As we can see, the sum of the columns doesn't add up to the total column 2. Overlap periods Total = 1200 to defer from 1/1 to 12/31 Reference period = Sept Comparison with Aug -> Oct | Total | Before | Aug -> Oct | Sept | Later | |-------|--------|------------|------|-------| | 1200 | 700 | 300 | 100 | 300 | As we can see, the sum of the columns doesn't add up to the total column Therefore we hide these filters as they will lead to confusing values task-id 3566725
Brazilian AvaTax requests now send each line's unit price and quantity in addition to the existing tax information. This prepares the integration for future electronic invoicing needs while keeping the current tax calculation behavior unchanged.
Original PR description
Although not strictly needed for tax calculation, it doesn't hurt and will be necessary for EDI later. Since adding it cleanly requires a change in function signature we already do it now. This decreases the likelihood of somebody relying on this exact function signature in other code.
The spacing between appointment details and table visuals on restaurant floor plans has been reduced. This makes the point-of-sale floor view cleaner and easier for staff to read at a glance.
Original PR description
There used to be a big gap between the appointment information and the table on the pos_restaurant floor_plan. We've now reduced this gap.
Recruitment resume scanning now recognizes skills made up of multiple words as complete phrases instead of splitting them into separate terms. This improves candidate profile accuracy and helps recruiters better identify relevant qualifications from OCR results.
Original PR description
Current behavior: skills with more than one word were not detected and it would search for each word in the skill as a separate skill Improved behavior: skills are now checked as a whole in the ocr results regardless of how many words described the skill Task: https://www.odoo.com/web#id=3563681&cids=1&menu_id=4720&action=333&active_id=2068&model=project.task&view_type=form
This update aligns several business features with improved analytic accounting behavior across companies. It helps reporting, budgets, timesheets, manufacturing, subscriptions, and inter-company flows use analytic accounts more consistently after core accounting changes.
Original PR description
Adapt for the changes in community, mostly in tests: * remove `company_id` from `account.analytic.plan` * read the right fields for accounts on `account.analytic.line` opw-3497653
This update removes older appraisal survey views and records that were only needed during a previous backport. It keeps the appraisal survey setup cleaner and easier to maintain without changing day-to-day business workflows.
Original PR description
Following this backport https://github.com/odoo/enterprise/pull/45465 , we cleanup in this PR the views and records that had to be added in stable and remove the old ones
Customers can now book more than one appointment for the same time slot when needed. This supports real-life cases like reserving appointments for multiple family members, booking several courts, or adding extra seats to an existing reservation.
Original PR description
Allow users to book multiple appointments at the same timeslot. Examples: - I book an appointment to the hairdresser for my 2 sons - I organize my own Tennis tournament and need a few courts - I already booked a table but am trying to book another one for some extra friends ... Task-3512250
The customer portal interface has been redesigned to look fresher and align better with the updated Odoo backend and website experience. The update adds consistent pictograms and improves layouts and responsiveness across portal pages for appointments, helpdesk, documents, subscriptions, sign, knowledge, and field service flows.
Original PR description
This PR introduces a general redesign of the Portal user interface, in order to give it that fresh and sleek vibe we also introduced in the backend. For the full list of the changes, please have a look at the linked pull request below. Community: - https://github.com/odoo/odoo/pull/138077 task-3046004 ---- # Main key changes ### Introducing pictograms As on the linked pull request, we introduce pictograms to illustrate concepts that are related to a module without being directly the module itself. These pictograms are already used accross the backend and other applications, which improves the consistency. ### Design & responsiveness updates + SCSS file revamp As mentioned on the other pull request, this PR introduces several changes to the Portal UI and layout. We also cleaned our SCSS files to turn these custom declarations into BS and Odoo classes. For a detailed list and explanation of all the changes, please have a look at the linked pull request.
This change removes an outdated error-handling helper and updates affected areas to use the standard approach for handling failed operations. It helps keep the platform easier to maintain while preserving expected behavior for server and connection issues.
Original PR description
This commit removes the promise extension which added the function `guardedCatch`. It was used to filter server and connection errors from javascript errors. Instead of using guardedCatch, we should use catch and check if the reason is a server or connection error if needed and re-throw the error if it's not handled. task: 3439226 Community: https://github.com/odoo/odoo/pull/137702
The wording of two Knowledge app buttons has been updated to make their actions clearer for users. This minor improvement helps users better understand where content will be moved when organizing articles.
Original PR description
This PR changes the wording of the buttons listed below: -Move to Workspace -Move to Private Task-3390780
Journal item matching numbers are now shown with color-coded tags, making reconciled entries easier to scan and distinguish. The update also aligns accounting report navigation and journal item behavior with recent usability improvements.
Original PR description
This commit contains some misc improvements based on the 16.0 overall improvements regarding navigation and Journal Items Matching numbers are now color-coded in the Journal Items view to improve readability In Journal Items view, if the matching number cell have a value, then a color tag will be assigned depending on the value in that cell community-PR: odoo/odoo#138140 enterprise-PR: odoo/enterprise#48980 task-id: 3530458
Task dependency links are now visible in broader task planning views such as My Tasks and All Tasks, not only within an individual project. Users also get clearer visual feedback when dependencies cannot be created because a target project has dependency tracking disabled, making planning across projects easier and less error-prone.
Original PR description
impacted modules: - web_gantt - project_enterprise Currently, the dependencies between tasks is only displayed in the Gantt view of a given project of the option 'Task dependency' is enabled on that project. This PR extends the display of task dependencies to the views "My Tasks" and "All Tasks". Implemented functionalities: - display the dependencies arrows and connectors in the 'my tasks' menu - display a red fa-ban icon if the user tries to connect a task to another one that belongs to a project on which the feature is disabled - hide the connectors on the tasks that are in a project on which the feature is disabled On top of that some improvements are also proposed in web_gantt. When a pill or a connector is dragged in the Gantt view: - When a pill is dragged: handles and connector creators of hovered pills are not displayed. - When a connector is dragged: handles and of hovered pills are not displayed. task-3092632
Project smart scheduling now handles tasks even when no hours were planned, reducing manual adjustment and making batch scheduling across projects more reliable. Time off warnings are also clearer when multiple assignees are unavailable for the same dates, and related leave detection has been corrected so requested time off is not missed.
Original PR description
- Before this commit : - When a task has mutliple assignees and that those assignees have planned/requested holidays during the same period, the warning message repeats itself : "Mitchell Admin has…
- Before this commit :
- When a task has mutliple assignees and that those assignees have
planned/requested holidays during the same period, the warning
message repeats itself : "Mitchell Admin has requested time off
from the 06/13/2023 to the 06/16/2023. Marc Demo has requested time
off from the 06/13/2023 to the 06/16/2023.". This is a bit heavy to
read and could be simplified when the holdiays planned dates are the
same.
- When the user uses the magnifier button in the gantt
view of project to schedule non-scheduled tasks, only the tasks with
planned hours are smart scheduled. The tasks without planned hours
are simply put the same day at the same time.
- After this commit :
- When a task has mutliple assignees and that those assignees have
planned/requested holidays during the same period, the message will
be : "Mitchell Admin, Marc Demo have requested time off from the
06/13/2023 to the 06/16/2023.
- Smart scheduling takes into account the non-planned hours tasks.
It does so by scheduling first all the selected tasks with planned
hours, and then schedules all the tasks without planned hours by
putting fictive planned hours for these tasks that depend on the
scale of the gantt view. The confimation wizard that appeared when
the scheduled tasks were outside of the gantt view scale has been
removed and replaced by a toast notification.
####### Precisons ######
- The smart scheduling now works even when selecting multiple tasks
(batching) EVEN if they belong to different projects. The tasks
are scheduled one projects after another, prioritizing the tasks
with allocated or remaining hours. For example, if we have project A
with task AA (allocated_hours = 2h) and task AB (allocated_hours
= 0h) and we have project B with task BA (allocated_hours = 3h) and
task BB (allocated hours = 0h), then the scheduling priority order
will be AA => BA => AB => BB.
- The precision in "week" and "month" scale is the one defined by
default (half-day) or the one selected in the studio.
- The precision in "day" scale is always a half-day
- The precision in "year" scale is always one month
- The scheduling of non-allocated hours tasks should follow the
following behaviour :
- A half day is always concening the working hours between
00:00:00 AM and 12:00:00 AM OR 12:00:00 AM and 12:00:00 PM.
The working hours inside those intervals don't matter for the
scheduling of non-allocated hours tasks. The task is also
planned only when the working hours in the half-day are fully
available. For example, if we are in "week" scale and the
precision is "half-day" then the task will be planned at the
first half day fully available (without conflicts with other
tasks).
- Another example in "year" scale : we trigger the smart
scheduling for a non-allocated hours task A in march. There is
another task B already planned until the 10th of march. Task A
will then be planned at the next full free interval => April.
task-3330290Knowledge templates can now include dynamic elements such as databases and links to related articles, so teams can start from more realistic and useful examples. This makes it easier for users to explore advanced Knowledge features without manually rebuilding connected content after applying a template.
Original PR description
# Purpose Currently, the templates of Knowledge only contain static HTML with text, images, tables, lists, etc. Now, we would like to include templates featuring databases and article links. It will…
# Purpose Currently, the templates of Knowledge only contain static HTML with text, images, tables, lists, etc. Now, we would like to include templates featuring databases and article links. It will then be possible to showcase more advanced features of Knowledge. Unfortunately, these elements refer to an article and require an article id to work properly. For the article links, for instance, we need to provide the id of the articles we want to open. When applying a template, the system will generate new articles with new ids. To ensure that the links will redirect the user to the right article, we have to update the ids stored in the document and provide the ids of the newly generated articles. As the templates are static and the ids are dynamic, we cannot properly integrate those elements in a template. This commit aims to eliminate that limitation by providing a magic `ref` function that people can use in their templates to refer to an external record. People will then be able to easily integrate databases and article links in their templates. This commit will also introduce new templates containing databases and article links. People can then use those templates to try out the more advanced features of Knowledge and understand the power of Knowledge with real world examples. ## Technical aspects To streamline our code base, we will merge the model `knowledge.article` with `knowledge.article.template`. That way, the articles and the templates will always be consistent. By merging the two models, we will not have to duplicate the logic and the views for the template preview. It will also not be necessary to: transform the favorites set on the embedded views, update the default values set in the context, etc. when turning a template into an article. During the development, we considered different approaches to tackle the existing limitations of the static templates: 1. We considered making the ids optional by introducing fallback mechanisms. The idea was to use the id of the active record when no id was provided. This would have allowed the integration of embedded view of article items without providing any id. However, the approach was very limited: it was not possible to list the article items of another article or insert an article link. 2. We considered patching the generated template with `lxml` to update the ids stored in the document. The solution didn't work very well: In some cases, it was not possible to know if the ids should be transformed or not as the ids could refer to another model. 3. We considered turning the static templates into dynamic templates using `QWeb`. The solution was checking all the boxes but we preferred not to allow non-admin users creating templates and using `QWeb` because the rendering engine relies on the `safe_eval` function which can potentially have undiscovered security flaws. To not take any risk, we prefer not to use that approach. For all these reasons, we prefer including a magic `ref` function in the templates and post-process the template to replace the `ref` function call with the appropriate id. With that approach, people can explicitly tell which id should be dynamically transformed. task-3334717
The website help center has been refreshed with updated icons and a responsive card layout. This makes support resources easier to browse across desktop and mobile devices, improving the customer self-service experience.
Original PR description
Design the new website helpdesk page with the new icons and a responsive card-layout. task-3486276 | Before | After | | -- | -- | |  |  |
The Knowledge cover image selection dialog now fits the updated media experience with a consistent height and clearer loading controls. Users can more easily browse available cover images, see when more images can be loaded, and know when all options have been shown.
Original PR description
In PR [1], the media dialog has been improved in order to make the UX better. This commit adapts the `KnowledgeCoverDialog`, in order to be compatible with the new media dialog. More precisely, these adaptations are the following: - the dialog height is now fixed and has the same size as when it is fully filled by images -> addition of the `h-100` class. - there is now a small footer displaying either an arrow to scroll, the "Load More" button or the "All images have been loaded" text. In order for this button to be updated, we need a scroll listener on the modal body and therefore we need the reference to the modal in `KnowledgeCoverSelector` (which extends `ImageSelector` and so `FileSelector`, which uses this ref)-> this commit adds this ref. [1]: https://github.com/odoo/odoo/pull/135875 task-3441587
Odoo no longer uses separate down payment products or related configuration settings, reducing setup complexity and the risk of incorrect product handling. Down payments in Sales and Point of Sale now follow the same tax and accounting logic, with lines split by tax and account combination for more accurate financial reporting.
Original PR description
- Removes down payment products and it's related settings. - Previously one down payment was created per tax(es), now it's one dp per tax(es)/account combo. - Align POS down payment behavior on SALE Community: https://github.com/odoo/odoo/pull/128421 Upgrade: https://github.com/odoo/upgrade/pull/5317 Task 3254314
Administrators now have dedicated permissions to delete approval requests, rather than relying on rules intended for approval officers. This makes access management clearer and easier to adjust in the future without affecting other roles.
Original PR description
I created basic rights for administrator to gives them permissions to delete approval requests (I also duplicate the other rules so if in the future if we want to change one of them it will be possible without affecting the admin) Before that it was limited to the domain for officer
Rental teams can now create delivery and return transfers directly from rental orders when the new rental stock setting is enabled. This improves operational tracking for rentals, including multi-step logistics, serial-numbered items, scheduled dates, and rental kits.
Original PR description
SALE_STOCK_RENTING: It will be possible to create pickings from rental orders by activating a new setting in the General Settings of Rental. Works with: - 1-2-3 steps of delivery/reception - serial numbers - rental dates: they will be used for the scheduled dates of the pickings SALE_MRP_RENTING: New module to correctly compute the qty_delivered and the qty_returned on rental order lines for kit products as well as manage the rewriting of ordered quantities on rental orders. see odoo/odoo#135425 task #3109952
Knowledge templates can now generate richer workspaces with article links, indexes, and embedded kanban, list, or calendar views that adapt when the template is applied. This makes templates more useful for repeatable business processes because they can automatically connect the right articles and views instead of relying on fixed content.
Original PR description
Currently, the templates of Knowledge will only contain static HTML with text, images, tables, lists, etc. Now, we would like to include more advanced templates containing article links, index…
Currently, the templates of Knowledge will only contain static HTML with text, images, tables, lists, etc. Now, we would like to include more advanced templates containing article links, index structures, kanban/list views of article items, etc. Unfortunately, there are a few limitations with static templates that prevent us from integrating those blocks: 1. To load a kanban or a list view of article items, we need to encode the id of the parent article in the body of the template. As the ids we need to provide are dynamics, we can not hardcode them directly in the body of the article. 2. For the embedded views of article items, we may define custom favorites that will also be encoded in the body of the article. When applying a template to an article, we will have to adapt those favorites to make them compatible with the new model. 3. To create links between articles, we will also need the encode the id of the target article in the body of the template. There can also be cyclical dependencies between articles which makes the creation of those articles difficult. ## Solution This PR will turn the static templates of Knowledge into dynamic templates using QWeb. The templates will now have a rendering context allowing people to define variables. The system will also expose functions that people can use to automatically convert id and fields based on the context being used. task-3334717
Knowledge templates can now include dynamic content such as preconfigured lists or kanban views tied to the article being created. This makes templates more useful and smoother to preview, helping users start from richer ready-made structures.
Original PR description
Currently, the templates of Knowledge will only contain static html with text, images, tables, lists, etc. Now, we would like to integrate blocks that depend on a record. More specifically, we would…
Currently, the templates of Knowledge will only contain static html with text, images, tables, lists, etc. Now, we would like to integrate blocks that depend on a record. More specifically, we would like to include pre-configured templates containing a kanban or a list view of article items. To embed a kanban or list view of article items, we need to have a reference to an article (i.e: an id). The embedded view will then display all article items of that article. The issue is that, most of the time, the id we need to provide is the id of the article itself and that article may not exist yet. The other issue is that the article items we show in the preview of the templates may also not exist. Those articles will only be created when the user applies the template. To solve these issues, we need to find a way to make the templates dynamic. # Solution 1. Create a custom "behavior" for the article items. We will then be able to customize those blocks without introducing specific code in the generic component. 2. Make the article id of the embedded views optional: In the custom behavior we created, we will assign the `active_id` to the active record. We will then be able to specify a kanban or a list view in the data files. 3. Customize the HTML field of the template gallery and load variants of the behaviors: We will then be able to customize the display of each block for the preview. For the kanban and list view of article items, we will load the record of `knowledge.article.template` instead of `knowledge.article`. task-3334717
Original PR description
This PR introduces a general redesign of the Portal user interface in order to give it that fresh and sleek vibe we also introduced in the backend. A list of the different changes can be found below.…
This PR introduces a general redesign of the Portal user interface in order to give it that fresh and sleek vibe we also introduced in the backend. A list of the different changes can be found below. It includes redesign of some elements as much as layout modification, or element additions. --- # Main key changes ### Introducing pictograms It is now a common practice to use pictograms across the UI when it comes to illustrate a concept related to a module but not the module itself. With the new cards layout, we implemented these pictograms to illustrate what each card is about and provides the user some context. <img width="885" alt="image" src="https://github.com/odoo/odoo/assets/128030743/e9746085-0e9a-4b68-bea2-e21f514e8b3b"> ### Layout and design update With this PR, portal is receiving several design changes, as the card layout on the home page as mentioned earlier. We also changed the general UI, removing custom `background-color` and aiming to something clean and sleek in the same vibe as what we introduced in the backend. ### Improved responsiveness With this new fluid layout, Portal gets a better responsiveness and benefits from a better layout at all media query, with different structures, always showcasing the essential information. ### SCSS files revamp We also took that opportunity to clean our SCSS files and remove custom declarations that were not needed anymore. We tend to reduce the amount of custom CSS and making use of our BS or Odoo classes. task-3046004 Co-authored-by: fdamhaut (FLDA) <flda@odoo.com> Co-authored-by: stefanorigano (SRI) <sri@odoo.com>