[IMP] mail: fine-tune call debrief design#5161
Closed
Brieuc-brd wants to merge 188 commits into
Closed
Conversation
|
This PR targets the un-managed branch odoo-dev/odoo:master-call_debrief-pian, it needs to be retargeted before it can be merged. |
39d26f1 to
3d7aaed
Compare
ddd79d0 to
b6ce237
Compare
7f60e36 to
f43ad1e
Compare
b6ce237 to
8547f28
Compare
b11136a to
2a67db1
Compare
ab68b67 to
0644742
Compare
edf0fa5 to
5075261
Compare
0644742 to
65c4fe6
Compare
dba13f3 to
59c39b9
Compare
anso-odoo
reviewed
Jun 11, 2026
b7cd47d to
c2182ef
Compare
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>
https://runbot.odoo.com/odoo/error/940346 closes odoo#271027 Signed-off-by: Matthieu Stockbauer (tsm) <tsm@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
93bf374 to
a60b8f2
Compare
Author
|
The new field has been merged, targeting now master in odoo#271103 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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: