Skip to content

[IMP] mail: fine-tune call debrief design#5161

Closed
Brieuc-brd wants to merge 188 commits into
master-call_debrief-pianfrom
master-call_debrief-design-brd
Closed

[IMP] mail: fine-tune call debrief design#5161
Brieuc-brd wants to merge 188 commits into
master-call_debrief-pianfrom
master-call_debrief-design-brd

Conversation

@Brieuc-brd

@Brieuc-brd Brieuc-brd commented May 11, 2026

Copy link
Copy Markdown

This commit redesigns the call debrief field to make it more
user-friendly and intuitive, while also improving its usability on
mobile devices.

task-6119464

Requires:

@robodoo

robodoo commented May 11, 2026

Copy link
Copy Markdown

This PR targets the un-managed branch odoo-dev/odoo:master-call_debrief-pian, it needs to be retargeted before it can be merged.

@Brieuc-brd Brieuc-brd force-pushed the master-call_debrief-design-brd branch from 39d26f1 to 3d7aaed Compare May 11, 2026 12:19
@nd-dew nd-dew force-pushed the master-call_debrief-pian branch 7 times, most recently from ddd79d0 to b6ce237 Compare May 21, 2026 07:55
@Brieuc-brd Brieuc-brd force-pushed the master-call_debrief-design-brd branch 3 times, most recently from 7f60e36 to f43ad1e Compare May 26, 2026 14:14
@nd-dew nd-dew force-pushed the master-call_debrief-pian branch from b6ce237 to 8547f28 Compare May 27, 2026 06:30
@Brieuc-brd Brieuc-brd force-pushed the master-call_debrief-design-brd branch 7 times, most recently from b11136a to 2a67db1 Compare June 2, 2026 14:12
@nd-dew nd-dew force-pushed the master-call_debrief-pian branch 2 times, most recently from ab68b67 to 0644742 Compare June 4, 2026 13:07
@Brieuc-brd Brieuc-brd force-pushed the master-call_debrief-design-brd branch 2 times, most recently from edf0fa5 to 5075261 Compare June 4, 2026 13:20
@nd-dew nd-dew force-pushed the master-call_debrief-pian branch from 0644742 to 65c4fe6 Compare June 4, 2026 13:23
@Brieuc-brd Brieuc-brd force-pushed the master-call_debrief-design-brd branch 2 times, most recently from dba13f3 to 59c39b9 Compare June 5, 2026 11:48
Comment thread addons/mail/static/src/views/fields/call_debrief/call_debrief_media_controls.xml Outdated
@Brieuc-brd Brieuc-brd force-pushed the master-call_debrief-design-brd branch 2 times, most recently from b7cd47d to c2182ef Compare June 11, 2026 13:19
utma-odoo and others added 27 commits June 19, 2026 09:21
Steps to reproduce:
- Install the `l10n_de` module and switch to a DE Company.
- Enable Peppol in the Invoicing app settings.
- Open the `DE Company` customer record.
- In the `Invoicing` tab, change the Peppol ID code from `Germany VAT`
   to `Germany Leitweg-ID` and set a code (e.g., `13075957-K000-52`).
- In the `Contacts & Addresses` tab, create an invoice-type contact named `test`.
- Create a new invoice using the `test` contact.
- Send the invoice via Peppol.
- Download the generated XML and inspect the `BuyerReference` field.

Observation:
The `<cbc:BuyerReference>` field is set to `N/A` instead of the configured Leitweg-ID.

Root Cause:
At [1], the `BuyerReference` node is populated using `vals['customer']`.
For invoices addressed to an invoice-type contact, the contact itself
does not contain the Peppol configuration, which is stored on the
commercial partner. As a result, the code fails to retrieve the
customer's `Leitweg-ID` and leaves the `BuyerReference` field empty.

Fix:
This commit ensures that the configured Leitweg-ID is correctly added to the
`BuyerReference` field for child contact.

[1]:
https://github.com/odoo/odoo/blob/281658e86971687656f3235ac1ff8afcb52f2908/addons/account_edi_ubl_cii/models/account_edi_xml_ubl_xrechnung.py#L87-L97

opw-6269478

closes odoo#270681

X-original-commit: fe8b440
Signed-off-by: Claire Bretton (clbr) <clbr@odoo.com>
Signed-off-by: Utsav Maru (utma) <utma@odoo.com>
Feedback came from our live chat team.
It is possible to join a conversation despite the conversation having ended
already. so from now the join button will be hidden if the livechat is ended.

task-6314128

closes odoo#270989

X-original-commit: c80f408
Signed-off-by: Jay Patel (jayp) <jayp@odoo.com>
When importing a Peppol/UBL vendor bill containing a line with a 100%
discount, the line was created in Odoo with quantity=1 and
discount of 100*original_qty, instead of the
expected quantity=qty_original and discount=100%.

This happened because the line-level branching in
`_import_ubl_invoice_line_add_price_unit_quantity_discount` relied on
the truthiness of `line_extension_amount` to detect whether the
`LineExtensionAmount` node was present in the XML. a line with
a genuine `<cbc:LineExtensionAmount>0</...>` was indistinguishable
from a line where the node was missing, and fell
through to the fallback branch intended for incomplete XML. That
fallback reconstructs the quantity from `<cbc:BaseQuantity>`,
ignoring `<cbc:InvoicedQuantity>`, and then computes the
discount percentage against the wrong denominator.

a `LineExtensionAmount` of 0 is the only legal way to
express a fully-discounted line, so this case must be distinguished
from the node being absent.

the fix is simply checking if the line exist not if its True

opw-6176349

closes odoo#270876

X-original-commit: c797d2a
Signed-off-by: Ricardo Gomes Rodrigues (rigr) <rigr@odoo.com>
Signed-off-by: Laurent Smet (las) <las@odoo.com>
Signed-off-by: Abdelaziz EL HAYYANY (azey) <azey@odoo.com>
Searching on `[("application_status", "=", "refused")]` is always empty.
It is an overlook from [odoo/206645] ([b6e4817]), where the `_search`
query was changed to search only active refused applications. However,
refused applications are always archived.

This was breaking `website_hr_recruitment` which was searching for
refused applications, without finding any.

[odoo/206645]: odoo#206645
[b6e4817]: odoo@b6e4817

opw-6204868

closes odoo#270641

X-original-commit: 7d95898
Signed-off-by: Bertrand Dossogne (bedo) <bedo@odoo.com>
Signed-off-by: Walravens Mathieu (wama) <wama@odoo.com>
Each payment method now belongs to exactly one payment provider via a
`provider_id` Many2one field, which replaces the former `provider_ids`
Many2Many field. Provider modules define their payment method records
directly in their own data files and no longer use those from the
`payment` module. Payment methods can now only be managed from the
provider form.

Controllers rendering the payment form must now call
`_prepare_payment_form_values`, which internally resolves available
payment providers, methods, and tokens, as well as the availability
report and tokenization input mapping in one place via the reworked and
renamed helpers:
- `PaymentProvider._get_compatible_providers` ->
  `PaymentProvider._find_available_providers`: returns all the available
  providers for the given payment context.
- `PaymentMethod._get_compatible_payment_methods` ->
  `PaymentProvider._find_available_payment_methods`: returns all the
  available providers' payment methods for the given payment context.
- `PaymentMethod._deduplicate_by_code`: returns a sorted recordset of
  unique-code payment methods.
- `PaymentToken._get_available_tokens` ->
  `PaymentProvider._find_available_tokens`: returns all the available
  providers' tokens scoped to the paying partner.
- `ResPartner._get_payment_tokens`: returns all the tokens manageable by
  the partner.

task-4684539

closes odoo#258854

Related: odoo/enterprise#113651
Related: odoo/documentation#18527
Related: odoo/upgrade#10428
Signed-off-by: Antoine Vandevenne (anv) <anv@odoo.com>
Before this commit, the PIP window did not support overlays, causing
overlays (such as popovers and dialogs) opened from the PIP window to
open in the main window.

This commit introduces overlay support in the PIP window so that overlays
opened from the PIP window are displayed inside the PIP window.

This commit also enables the quick voice and video menus in PiP, for
improved UX.

task-5149597

closes odoo#264014

Related: odoo/enterprise#117022
Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
This commit improves the tag sorting mechanism within the `Convert to Task`
wizard in the To-Do app.

Previously, the tag dropdown prioritized tags based solely on the user's
personal task history.

Project-specific tags are now shown first in the dropdown.
After that, tags from the user’s recent activity are displayed.
This ensures that the most relevant tags appear at the top.

task-6172981

closes odoo#261989

Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
The l10n_tr_nilvera_edispatch_xml_id fields was set to be
stored. However, on file generation, the recomputation of
the xml_id doesn't trigger which causes and issue when
sending the payload. Further more, send payload button
should be only visible only when the delivery is in
done state and document not sent.

task-5138327

closes odoo#270842

Signed-off-by: Khumam Alzagim (alkh) <alkh@odoo.com>
Purpose:
In the portal list view of timesheets, long text in the Project, Task, and
Description fields gets cropped and hidden on a single line. This makes it
difficult to read the full content without hovering over each row.

After:
The text in these columns now wraps onto multiple lines instead of being cut off,
ensuring the entire content is visible at a glance.

task-6034766

closes odoo#254328

Signed-off-by: Xavier Bol (xbo) <xbo@odoo.com>
As part of the migration from `owl 2` to `owl 3`, this commit replaces
uses of `t-custom-model` with `t-model` or `t-model.proxy`.

closes odoo#270481

Signed-off-by: Matthieu Stockbauer (tsm) <tsm@odoo.com>
*: [html_builder, html_editor, mrp_subcontracting, project, website]

The ColorPicker is only used by html_editor, so it makes more sense
to have it live there rather than in web.

- Move color_picker components from web/static/src/core/color_picker/
  to html_editor/static/src/components/color_picker/
- Move gradient_picker from html_editor/main/font/ to
  html_editor/components/color_picker/gradient_picker/
- Update all import paths and template names from web. to html_editor.
- Update asset references in html_editor, mrp_subcontracting and
  project manifests.

task-6115798

Part-of: odoo#259295
Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
*: [html_builder, web, website]

Purpose of this commit:

- When plain `<input>` in the main document received focus, the browser
would move the active selection away from the editor's contenteditable,
causing the current text selection to be lost. This made it impossible
to know which text would be affected by the chosen color or formatting.

- To fix this, a new IframeInput component is introduced that renders
an `<input>` inside an iframe's document. Since the iframe has its own
document context, focusing the input does not disturb the selection in
the parent document's contenteditable, the editor always knows what
text is selected even while typing a hex value or font size.

- CustomColorPicker hex input and GradientPicker angle/position inputs
are migrated to IframeInput. FontSizeSelector was already using it.

IframeInput exposes:
- iframeRef/inputRef for direct DOM access by parent components.
- inputAttrs to pass all input-related attributes in a unified way.
- iframeClass for iframe-level styling and test querying.
- inputStyle for component-specific CSS overrides.
- Full event prop support (click, input, change, keydown, blur, focus).

task-6115798

closes odoo#259295

Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
…nvoice & transaction types

Previously, determining whether invoice should be routed to ZATCA Clearance(B2B)
or Reporting(B2C) endpoints relied implicitly on partner data (like company type
or VAT number). This could lead to compliance issues if partner data was
incomplete.

This commit introduces explicit UI controls to give users full visibility and
flexibility over the exact invoice and transaction types to ensure compliance
with the GCC VAT Framework.

Key changes:
- Add `l10n_sa_edi_transaction_type_ids` (Export, Summary, Nominal) and
  `l10n_sa_invoice_type` (Tax/Simplified) fields to `account.move`.
- Restrict field visibility to only show when the journal is ZATCA-onboarded.
- Automatically set the default invoice type based on partner (Tax for company,
  Simplified for individual).
- Generate the 7-digit ZATCA transaction code (NNPNESB) dynamically based on
  user-selected l10n_sa_invoice_type and l10n_sa_edi_transaction_type_ids.
- Add a critical validation warning on send wizard to block 'Export' transaction
  types on 'Simplified' invoices.
- Preserve existing legacy workflows for Credit Notes, Debit Notes, and
  Prepayment invoices.

Related Upgrade PR: odoo/upgrade#10388

task-4506555

Part-of: odoo#267943
Related: odoo/upgrade#10388
Signed-off-by: de Wouters de Bouchout Jean-Benoît (jbw) <jbw@odoo.com>
To resolve ZATCA rejection (BR-KSA-72) for simplified summary invoices, the
`cbc:LatestDeliveryDate` node must be present in the UBL.

This commit introduces the required field and validations to support continuous
supplies:
- Added l10n_sa_edi_supply_end_date field to allow users to specify end date.
- Mapped new field to populate "cac:Delivery/cbc:LatestDeliveryDate" in the UBL
  template when filled.
- Added validation to ensure the Supply End Date is greater than or equal to
  standard Supply Date.
- Added validation to block submission if the Supply End Date is empty when
  'Invoice Type' is Simplified and 'Transaction Type' is Summary.
- Removed outdated tooltip on delivery_date field regarding multiple deliveries.
- Updated invoice PDF report to display Supply End Date alongside Supply Date.

task-4506555

closes odoo#267943

Related: odoo/upgrade#10388
Signed-off-by: de Wouters de Bouchout Jean-Benoît (jbw) <jbw@odoo.com>
Issue:
- Insert an icon and select it.
- The toolbar displays image specific buttons alongside icon toolbar buttons,
  such as Preview Image, Image Caption, and Replace Media which are not
  applicable to icons.

Cause:
- Icon is included in the `image_actions` group namespace along with image.
  As a result, buttons from the image_actions group are also displayed when an
  icon is selected,.

Solution:
- Remove icons from the `image_actions` group namespace. This will ensure that
  image specific buttons, such as Preview Image, Image Caption, and
  Replace Media, are displayed only when an image is selected and not when an
  icon is selected.

task- 6273136

closes odoo#268229

Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
A `write` job without a `ref` targets all records of its model.
During session planning, however, its `record_count` only included
existing records and preceding `create` jobs without a `ref`.

This made the planned count too low when earlier `create` jobs used a
`ref`, even though those records would still be targeted by the global
`write` job. That could skew progress and, for split jobs, risk leaving
part of the actual target set outside the planned offset/limit ranges.

This commit counts preceding creates across all refs for the same model
when planning a `write` job without ref.

closes odoo#271025

Signed-off-by: Krzysztof Magusiak (krma) <krma@odoo.com>
Allow workers to record the quantities completed on each workorder,
the latest recorded quantity becomes the mo's producing quantity. 
Add a flag to enable continuous production (subsequent work orders will
become ready as soon as some quantities are ready).

task: 6175830

See odoo/enterprise#118753

closes odoo#267113

Signed-off-by: William Henrotin (whe) <whe@odoo.com>
*=website_blog, website_crm_partner_assign, website_event,
website_event_exhibitor, website_event_sale, website_event_track,
website_forum, website_hr_recruitment, website_partner,
website_sale, website_sale_slides, website_slides

Introduce a unified structured-data layer that emits Schema.org JSON-LD
on every website page, replacing scattered microdata
(`<span itemprop="...">`).

Core - Add `website.structured_data.mixin` exposing:
    * `_prepare_jsonld_vals()` -> per-record Schema.org dict
    * `_get_jsonld_dict()` -> ordered list of schemas for a page
    * `_get_breadcrumb_items()` -> (name, url) pairs for the trail
    * `_build_breadcrumb_jsonld()` -> BreadcrumbList from the pairs
    * `render_jsonld()` -> final `<script>` payload
    * `_to_iso_datetime()` -> Schema.org-compliant ISO 8601
    - Inject the base `<script type="application/ld+json">` slot in the
    website layout so an Organization schema is always present, and
    detail views append their own types on top.
    - Add `images_from_html` helper to harvest inline images from rich
    HTML content.

Breadcrumbs
    - Each model contributing a page chains `_get_breadcrumb_items` via
    `super()`, appending its own (name, url) pair.

Controllers
    - Listing and detail controllers populate `structured_data` in the
    qweb values from `record.render_jsonld(is_detail_page=...)`. The
    layout renders it inside `<script type="application/ld+json">`.

Module adaptations
    - website_blog       -> Blog, BlogPosting, CollectionPage
    - website_crm_partner_assign -> CollectionPage (partner listing)
    - website_event      -> Event, Offer, Place, PostalAddress
    - website_event_exhibitor -> LocalBusiness/Person, ItemList
    - website_event_sale -> drops legacy microdata on ticket prices
    - website_event_track -> adds performer (Person/Organization) to Event
    - website_forum      -> Question, Answer, QAPage
    - website_hr_recruitment -> JobPosting with jobLocation or
                              jobLocationType=TELECOMMUTE +
                              applicantLocationRequirements
    - website_partner    -> LocalBusiness/Person, CollectionPage
    - website_sale       -> Product, Offer, PropertyValue
    - website_sale_slides -> adds Offer (price) to Course
    - website_slides     -> Course, CollectionPage, AggregateRating

Each `_prepare_jsonld_vals` either provides every Schema.org/Google
required property or returns a falsy value so the mixin drops the
schema before render.

Example
-------

  class BlogPost(models.Model):
      _inherit = ['blog.post', 'website.structured_data.mixin']

      def _prepare_jsonld_vals(self):
          base = self.get_base_url()
          return {
              "@type": "BlogPosting",
              "headline": self.name,
              "url": f"{base}{self.website_url}",
              "datePublished": self._to_iso_datetime(
                  self.published_date or self.create_date,
              ),
              "author": {"@type": "Person", "name": self.author_id.name},
              "publisher": {"@id": f"{base}/#organization"},
          }

      def _get_jsonld_dict(self, is_detail_page=False):
          schemas = super()._get_jsonld_dict(is_detail_page)
          if is_detail_page:
              schemas.append(self._prepare_jsonld_vals())
          return schemas

      def _get_breadcrumb_items(self, is_detail_page=False):
          items = super()._get_breadcrumb_items(is_detail_page)
          items.append((self.blog_id.name, self.blog_id.website_url))
          if is_detail_page:
              items.append((self.name, self.website_url))
          return items

Controller
    values['structured_data'] = post.render_jsonld(is_detail_page=True)

Output (rendered into `<script type="application/ld+json">`)

  {
    "@context": "https://schema.org",
    "@graph": [
      {"@type": "Organization",
       "@id": "https://example.com/#organization",
       "name": "Example",
       "url": "https://example.com",
       "logo": "https://example.com/logo.png"},
      {"@type": "BlogPosting",
       "headline": "Hello",
       "url": "https://example.com/blog/hello",
       "datePublished": "2026-05-21T10:00:00+00:00",
       "author": {"@type": "Person", "name": "John"},
       "publisher": {"@id": "https://example.com/#organization"}},
      {"@type": "BreadcrumbList",
       "itemListElement": [
         {"@type": "ListItem", "position": 1,
          "name": "Home", "item": "https://example.com/"},
         {"@type": "ListItem", "position": 2,
          "name": "Blog Posts", "item": "https://example.com/blog"},
         {"@type": "ListItem", "position": 3,
          "name": "Hello", "item": "https://example.com/blog/hello"}
       ]}
    ]
  }

task-4655276

closes odoo#264562

Related: odoo/enterprise#119516
Signed-off-by: Habib Ayob (ayh) <ayh@odoo.com>
adds 81 new UoM codes and removes 4 deprecated ones as per the latest
ETA regulations and only shows the relevant field in debug mode.

task-5016463

closes odoo#268835

Related: odoo/upgrade#10429
Signed-off-by: Omar Khalid (khom) <khom@odoo.com>
In this commit:
- Track all employees who log into a POS session through a new
`logged_employee_ids` field on `pos.session`, synced to `pos.config`
for dashboard usage.
- Update the POS dashboard layout to display the current cashier avatar
below the action button and improve badge alignment/styling.
- This allows better visibility of session cashier history directly
from the POS dashboard.

Task:6139888

closes odoo#261290

Signed-off-by: Stéphane Vanmeerhaeghe (stva) <stva@odoo.com>
This commit introduces a unified way to store and visualize post-call
artifacts (call recordings). It also lays the groundwork for introducing
transcripts, primarily for Discuss and VoIP.

CALL ARTIFACT - What is that?
---
A call.artifact represents a discrete "product" of a call. For example,
it can be a call's recording or a call transcription. Each artifact acts
as a thin metadata layer (start_ms, end_ms, source) for a maximum of one
ir.attachment. This keeps the generic ir.attachment table lean while
allowing us to store the complex, multi-segment timing metadata required
for chunked playback and AI transcription pipelines.

RECORDING STORAGE
---
Odoo's infrastructure is not designed for the mass storage of media.
Even though a single recording's size is negligible, VoIP systems are
expected to generate a massive number of them. Therefore, the persistent
call recording feature will ONLY be available when the cloud storage
module is installed and configured, allowing media to be offloaded to
providers like S3 or GCS.

Note: Transient recordings used for transcriptions are not bound by this
requirement. (Check out the enterprise commit for more details.)

CALL DEBRIEF - New UI Media Player
---
The presentation of the artifacts is realized with the Call Debrief
Widget - a new field widget. It provides a modern synchronized player
supporting audio/video recordings (with support for synchronized
transcripts), drag-to-seek functionality, keyboard shortcuts with live
feedback, and variable playback rates.

task-5153790

closes odoo#233836

Related: odoo/enterprise#101741
Related: odoo/upgrade#9521
Signed-off-by: Adrien Schoffeniels (adsc) <adsc@odoo.com>
Currently in html_editor, nodes are in some places created
via `document.createElement(...)` and in some other places
via `this.document.createElement(...)`. When this.document
is the iframe's one, this.document !== document. Mixing nodes
from different document origins should not be done. This commit
replaces `document.createElement` by `this.document.createElement`
to ensures that node origins are not mixed.

task-3603248

closes odoo#257574

Signed-off-by: David Monjoie (dmo) <dmo@odoo.com>
In this commit:
Redesign the Egyptian Chart of Accounts (CoA),
improve sequencing, and add parent account groupings.

- Reverse Liquidity: Reordered from fixed assets to cash/payables.
- 6-Digit Codes: Standardized structure (2 digits group, 2 subgroup, 2 ID).
- Parent Accounts: Added 20 parent accounts for better report structures.
- Default Accounts: Updated system mapping for deferred income, prepayments, and
  other expenses.

Related PR: odoo/upgrade#10339
odoo/enterprise#121001

task-6074931

closes odoo#266614

Related: odoo/enterprise#121001
Related: odoo/upgrade#10339
Signed-off-by: Maximilien La Barre (malb) <malb@odoo.com>
The function `_update_xmlids` performs the update directly in SQL. It
already updates the values that are in the ormcache, but does not
invalidate or update the transaction cache. If you have existing
references, they continue seeing the old data.

closes odoo#271026

Signed-off-by: Krzysztof Magusiak (krma) <krma@odoo.com>
This commit adds support for the "." and "?" keyboard shortcuts in the
call debrief field.

task-6119464
This commit redesigns the call debrief field to make it more
user-friendly and intuitive, while also improving its usability on
mobile devices.

task-6119464
@Brieuc-brd Brieuc-brd force-pushed the master-call_debrief-design-brd branch from 93bf374 to a60b8f2 Compare June 19, 2026 14:31
@Brieuc-brd

Copy link
Copy Markdown
Author

The new field has been merged, targeting now master in odoo#271103

@Brieuc-brd Brieuc-brd closed this Jun 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.