Friday, May 5, 2023
57 changes · master
Enhancements to existing features
This update polishes several CRM and related sales screens to make forms clearer, reports cleaner, and lead assignment status easier to notice. It also improves activity user avatars and lead enrichment messages so sales teams can read key information more quickly.
Original PR description
Purpose ======= Improve some UI display of the CRM and CRM related modules. CRM v16.3 promenade. Specifications =========== web ------ * Increase the maximum input field size to handle a larger…
Purpose
=======
Improve some UI display of the CRM and CRM related modules.
CRM v16.3 promenade.
Specifications
===========
web
------
* Increase the maximum input field size to handle a larger number
of characters.
crm,crm_iap{_enrich}{_mine},sale,sales_team
-------------------------------------------------------------------
* Improve some small UI display like placeholders, search filters,
the wording of the lost reason modal, the fields alignments,
always underline certain fields, set certain fields as optional in
the reporting tree views, ...
crm
------
* Modify the informative lead count field to be displayed as a muted text
sentence with text color warning when it exceeds the maximum month count.
crm{_sms}
---------------
* Remove the reporting pipeline tree view buttons as the view is not
an operational one so those won't be used by the manager.
mail
-------
* Add a m2o avatar widget to a field.
iap_mail
-------------
* Improve the display of the lead enrichment message appearing in the
chatter after an enrichment.
More details in underlying commits.
See: https://github.com/odoo/enterprise/pull/38498
Task-3204763Email templates sent automatically when a record is created now appear after the original incoming message, making conversations easier to follow. Replies to those automated template emails are now treated as regular discussions so followers can be notified appropriately.
Original PR description
When setting up an alias, if a tracked value was set to send a mail template on creation of a record, the template would be marked as sent before the original message was received. This commit puts them back into order by processing the reception of the original message within the method of creation of the record. Responding to that template with an e-mail would not notify the followers of that record. This template is now marked as mt_comment. Task-2834304 -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Odoo now uses a single modern date and time picker for dates, times, and date ranges, replacing older third-party tools. This makes date entry more consistent across apps and simplifies how date ranges are configured, though some list views can no longer sort by the range end date.
Bank and cash journals now automatically use the company's currency when no currency is manually selected. This helps prevent payment and accounting issues caused by missing currency settings, while keeping user-defined currencies unchanged.
Original PR description
Setting company's currency on bank/cash journals, if they are not set by the user, helps avoid issues described in Task 2834678. -- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
The mail module’s automated tests now use a shared command system instead of hardcoded instructions. This makes the tests easier to maintain and reduces the risk of unreliable test behavior, helping support smoother future updates.
Original PR description
Using hardcoded ORM commands in tests is cumbersome and not reliable. This commit introduces the same system as the one used on the server.
This update makes several event, SMS marketing, phone blacklist, and email template screens clearer and easier to use. It adds helpful placeholders and avatars, hides empty or unavailable information, improves wording, and aligns SMS marketing navigation with Email Marketing so users can complete common tasks with less confusion.
Original PR description
Purpose ======= Improve UI in various modules Specifications =========== event{_booth}{_crm}, website_event{_meet}{_track}{_track_live}…
The demo payment module can now simulate capturing only part of an authorized payment. This helps businesses and implementers test payment flows that involve split shipments, partial fulfillment, or adjusted order amounts before using a live payment provider.
Original PR description
support partial capture feature in demo payment task-2803352
This update adds missing internal checks for spreadsheet and manufacturing overview screens so invalid configuration is caught earlier. It helps make these views more reliable for users without changing day-to-day workflows.
Original PR description
Task: [3297417](https://www.odoo.com/web#id=3297417&cids=1&model=project.task&view_type=form) 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
Favorite buttons across Knowledge views now use one shared styling approach. This reduces duplication and helps keep the user experience consistent when favoriting articles in different parts of the app.
Original PR description
Purpose: - Currently, the toggle favorite buttons in the different knowledge views have the same style, but through different classes. This commit makes sure that we only use one class for these buttons, to remove redundancy and to make sure that these buttons keep the same style. Task-3284518
Spreadsheet-related components now include additional validation to ensure they receive the expected information before use. This reduces the risk of hidden configuration issues and helps keep spreadsheet features more stable for users.
Original PR description
Task: [3297417](https://www.odoo.com/web#id=3297417&cids=1&menu_id=4720&action=333&active_id=2328&model=project.task&view_type=form)
The appointment interface now hides the lead count when there are no related leads and prevents users from creating unrelated opportunities from that shortcut. The appointment booking email template description was clarified so users understand it notifies followers of the appointment type, not every person who books.
Original PR description
Purpose ======= Improve UI in appointment and appointment crm Specifications =========== - Hide the appointment type lead count stat button when the count is equal to 0. - Remove the possibility to create opportunities from the appointment type stat button as one should not be able to, and especially since they won't be linked to the type anyway. - Reword the appointment booked template description because the template will not be sent to all people who book the appointment but to all followers of the appointment type when an appointment is booked. Task-3280602
This update introduces a new, unified date and time picker across Odoo, replacing older third-party tools and simplifying how date ranges are configured in views. Users should see a more consistent experience when choosing dates, times, or ranges, though some list views can no longer sort by the range end date.
Original PR description
The CRM Enterprise pipeline reporting list now uses the updated reporting view from CRM. This removes operational buttons that were not needed in reporting, making the view simpler and more focused for users reviewing pipeline data.
Original PR description
Change the pipeline reporting tree view by the new one created in crm which removes some unnecessary operational buttons from the reporting view. See: https://github.com/odoo/odoo/pull/115326 Task-3204763
The Knowledge app is easier to use on mobile devices with a collapsible article menu and a better default view for deleted articles. This makes browsing and managing knowledge content more comfortable on smaller screens.
Original PR description
This PR will greatly improve the usability of the main view of Knowledge for mobile users by turning the aside block listing the articles into a foldable menu. task-2867059
Resolved issues and error corrections
Creating a project task without a title now shows a clear notification instead of a technical validation error. Task assignment emails are also formatted correctly so the subject and message body are easier to read.
Original PR description
- In the quick create view, do not enter a value in the Task Title field and try to create a task, a validation error is showing instead of a toast notification highlighting that a required field is not set. - In your inbox, when you are assigned to a task, you receive mail from the project. In that mail, the mail subject and body are displayed in one line. In this PR, display_name field is set as a required field, meaning that if the field is left empty, a notification will appear in the form of a toast message instead of a validation error. The mail template's 'assignee_name' field currently has a 'span' tag, which may cause inline subject and body issues. To prevent this, it is recommended to use a 'div' tag instead.
Code cleanup and technical improvements
The mail message layout was simplified to reduce duplicated code between viewing and editing messages, making it easier to maintain. It also corrects small visual issues so message editing and option menus behave more consistently for users.
Original PR description
Simplify template so there are less code duplication between editing state and non-editing state. Also fixes following small style issues: - missing opacity-25 when editing message of others - expanded options of message come on top of jump present alert
Miscellaneous changes
The pdf viewer sometimes displays the sidebar when we open the pdf Solution: Add `pagemode=none` to the url when opening a pdf in attachments opw-3193516 Forward-Port-Of: odoo/odoo#120490 Forward-Port-Of: odoo/odoo#120330 https://github.com/odoo/enterprise/pull/40746
Original PR description
The pdf viewer sometimes displays the sidebar when we open the pdf Solution: Add `pagemode=none` to the url when opening a pdf in attachments opw-3193516 Forward-Port-Of: odoo/odoo#120490 Forward-Port-Of: odoo/odoo#120330 https://github.com/odoo/enterprise/pull/40746
Original PR description
# Owl DateTimePicker (community) This PR introduces a date picker OWL component meant to handle the following use-cases: - date picker - date & time picker - date range picker - date & time range…
# Owl DateTimePicker (community)
This PR introduces a date picker OWL component meant to handle the
following use-cases:
- date picker
- date & time picker
- date range picker
- date & time range picker
Basically, this component is the union of the two previous third-party
libraries handling these cases: TempusDominus and DateRangePicker.
## New components introduced:
* The main addition of this commit is the `DateTimePicker` itself which
handles the display and interactions of the calendar and time pickers.
> see @web/core/datetime/datetime_picker
* The picker can then be coupled to an input using the
`useDateTimePicker` hook. The purpose of this hook is to handle events
on a given input element and syncronize its value to a date picker it
will spawn in a popover.
> see @web/core/datetime/datetime_hook
* Lastly, a simple `DateTimeInput` component will render an input and
call the hook mentioned above to handle it. This component is
effectively replacing the previous DatePicker and DateTimePicker
components (note that it does not handle range values).
> see @web/core/datetime/datetime_input
## Date range declarations in views
Another noticeable change of this commit is the definition of daterange
fields in views:
- Previously, the arch would have to define both fields
and bind them via their options, while also adding an arrow between
inputs or other forms of connection.
- In the new implementation, only the start date field must be declared,
and a date range can be spawned by providing an `end_date_field` in its
options.
Example:
```xml
<field
name="start_datetime"
widget="daterange"
options="{'end_date_field': 'end_datetime'}"
/>
```
## ⚠️ Added limitations
- this new way of declaring date ranges means that templates have been
revised to declare one field tag instead of two. This means that list
views using date ranges have lost the ability to be sorted on their end
date fields.
> Justification: the current use cases have been reviewed and it has
been decided that it was not needed to sort on the end date on the
affected list views.
> Workaround: drop the date range and declare both fields as simple date
pickers (i.e. without the end_date_field option).
- all modifiers applied to a field using a date range will be copied and
applied to the end date field. There is no way to define modifiers
specific to one field or the other.
> Justification: there was no use case where one of the two fields
needed specific modifiers.
> Workaround: same as the previous point: split the range into 2 simple
date picker fields.
## Additional notes:
- the `widget="daterange"` is not mandatory in form views, but is required
in list views because only fields with explicit widgets will not be
rendered as simple <span> elements. The date range feature will be
available as soon as an end_date_field is specified.
- as the end date field is not explicitly defined in the view anymore,
any modifier depending on it need to have it defined as invisible
somewhere in the arch.
## Links
- Enterprise PR: https://github.com/odoo/enterprise/pull/38569
- Documentation PR: https://github.com/odoo/documentation/pull/4330
- Task ID: [3121497](https://www.odoo.com/web#id=3121497&cids=1&menu_id=4720&action=333&active_id=133&model=project.task&view_type=form)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prPurpose
=======
Improve UI in various modules
Specifications
===========
event{_booth}{_crm}, website_event{_meet}{_track}{_track_live}
-------------------------------------------------------------------------------------------
- The reporting fields, the chat room and the participant count
of the meeting room form should not be showed while the record
is not created.
- Rewording on event track "Button appears" and "Color" field.
- Remove unnecessary helpers in event track form.
- Remove "Wishlisted By" stat button when the count is equal to 0.
- Add many2one widget avatar on lead rule "Saleperson" field and
event track "Responsible" field.
- Add placeholders in event booth form view, event location
tree view, event tags categories form view and event stages
form view.
mail, mass_mailing_sms, phone validation:
---------------------------------------------------------------
- Add sample data in the mass_mailing_sms blacklist phone
numbers tree view.
- Update the mass_mailing_sms demo data so that, instead of
the sms being stuck due to a lack of credits, they are
all sent.
- Swap the mass_mailing_sms list view with the kanban view
so that the list view is the main one like in Email Marketing.
- Rename the reset mail template confirm button from "Proceed"
to "Reset Template" to make the action more explicit.
Task-3280602
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr# Owl DateTimePicker (enterprise) This PR introduces a date picker OWL component meant to handle the following use-cases: - date picker - date & time picker - date range picker - date & time range…
# Owl DateTimePicker (enterprise)
This PR introduces a date picker OWL component meant to handle the
following use-cases:
- date picker
- date & time picker
- date range picker
- date & time range picker
Basically, this component is the union of the two previous third-party
libraries handling these cases: TempusDominus and DateRangePicker.
## New components introduced:
* The main addition of this commit is the `DateTimePicker` itself which
handles the display and interactions of the calendar and time pickers.
> see @web/core/datetime/datetime_picker
* The picker can then be coupled to an input using the
`useDateTimePicker` hook. The purpose of this hook is to handle events
on a given input element and syncronize its value to a date picker it
will spawn in a popover.
> see @web/core/datetime/datetime_hook
* Lastly, a simple `DateTimeInput` component will render an input and
call the hook mentioned above to handle it. This component is
effectively replacing the previous DatePicker and DateTimePicker
components (note that it does not handle range values).
> see @web/core/datetime/datetime_input
## Date range declarations in views
Another noticeable change of this commit is the definition of daterange
fields in views:
- Previously, the arch would have to define both fields
and bind them via their options, while also adding an arrow between
inputs or other forms of connection.
- In the new implementation, only the start date field must be declared,
and a date range can be spawned by providing an `end_date_field` in its
options.
Example:
```xml
<field
name="start_datetime"
widget="daterange"
options="{'end_date_field': 'end_datetime'}"
/>
```
## ⚠️ Added limitations
- this new way of declaring date ranges means that templates have been
revised to declare one field tag instead of two. This means that list
views using date ranges have lost the ability to be sorted on their end
date fields.
> Justification: the current use cases have been reviewed and it has
been decided that it was not needed to sort on the end date on the
affected list views.
> Workaround: drop the date range and declare both fields as simple date
pickers (i.e. without the end_date_field option).
- all modifiers applied to a field using a date range will be copied and
applied to the end date field. There is no way to define modifiers
specific to one field or the other.
> Justification: there was no use case where one of the two fields
needed specific modifiers.
> Workaround: same as the previous point: split the range into 2 simple
date picker fields.
## Additional notes:
- the `widget="daterange"` is not mandatory in form views, but is required
in list views because only fields with explicit widgets will not be
rendered as simple <span> elements. The date range feature will be
available as soon as an end_date_field is specified.
- as the end date field is not explicitly defined in the view anymore,
any modifier depending on it need to have it defined as invisible
somewhere in the arch.
## Links
- Community PR: https://github.com/odoo/odoo/pull/112171
- Documentation PR: https://github.com/odoo/documentation/pull/4330
- Task ID: [3121497](https://www.odoo.com/web#id=3121497&cids=1&menu_id=4720&action=333&active_id=133&model=project.task&view_type=form)
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prThe project app now only shows the Sales Order button for a task when that task has its own linked sales order line. This prevents users from seeing a misleading sales order link after it has been removed from the task.
Original PR description
[[FIX] project: fix sale order stat button in project](https://github.com/odoo/odoo/pull/118305/commits/e76acba91c2a8d8ba63bdffef0d6ff051ef5a07e)
Steps:
install sale_project
set SOL on project
set SOL on task and remove it
Issue:
when we set SOL on task SO stat button is visible but when we remove SOL from
task SO stat button is visible
Cause:
compute of SO was tasking SO from task SOL but when there is no SOL on the task
it is taking SO from Project SOL
Fix:
make SO related to SOL from the task because SO stat button should be visible
according to task SOL
task-3251672Fixed an issue where the up and down arrow keys did not move correctly between lines when writing multi-line messages. This also prevents accidental editing of the last message unless the message box is empty, making message composition more predictable.
Original PR description
Before this commit, when composer had some text content in multi-line, arrow up/down was not jumping to previous/next line. This happens because the navigable list is active even when not shown, and was preventing all keydown events. This commit fixes the issue by limiting handling of keydown events of navigable list to when it is shown. Also fixes a bug where the quick edit of last message was triggered when composer text was non-empty with ArrowUp. This should only be triggered when the composer text input is empty.
This change improves how Odoo handles property-style fields when records are updated dynamically, preventing incorrect or empty values during onchange flows. It also avoids saving invalid property names in some edge cases, making record creation and updates more dependable for users.
Original PR description
The issue with properties fields is that the value in the record snapshot is not correct. This is caused by `convert_to_record()` combining the values with the definition, and in the case of `onchange()`, the values don't match the definition, which causes the method to return the empty list `[]`. We fix the root cause by changing `convert_to_record()` to return the `dict` itself. The combination of the values with the definition is now only done in `convert_to_read()`. Method `convert_to_onchange()` has only one hack to retrieve the current definition record from the record snapshot, as because of cache invalidation, its value is no longer available.
This draft update adjusts visual styling across several Odoo Enterprise screens as part of the Milk design refresh. It fixes an alignment issue with the Spreadsheet button on mobile pivot views and updates colors, buttons, badges, menus, dropdowns, checkboxes, lists, and forms for a more consistent user experience.
Original PR description
This PR fixes : - [aju] https://i.imgur.com/RszBeCF.png mobile > pivot view > the 'spreadsheet' button is not aligned with the other buttons task-2818586 Community branch : https://github.com/odoo-dev/odoo/pull/2490
Marketing campaign tests now apply the same activity filters as live campaigns, so test runs only process records that match the intended rules. This helps teams validate campaigns more accurately before launch and reduces misleading test results.
Original PR description
Before this commit, when launching a test for a marketing campaign, activity domains are ignored - records are processed even if they don't respect the domain. With this commit, tests behave as real campaigns, meaning the domains are taken into account. Task-3138559
This update adjusts accounting-related tests so they correctly handle default currencies on bank and cash journals. It helps keep reconciliation, cash flow, and SEPA payment checks reliable after the journal currency behavior change.
Original PR description
Task 2834678 Adding a default currency on bank and cash journals breaks reconciliation tests. This PR fixes the tests by adjusting currency_id.
Helpdesk ticket messages now appear in the correct chronological order when created from incoming emails or related flows. This makes conversations easier to follow and updates internal checks to match the new tracking message behavior.
Original PR description
Update parts of the code that relied on tracking being handled during the creation process and tracking tests that expected 'notification' message type. Task-2834304
Odoo Studio now correctly shows available fields when setting the default grouping for Kanban views. This lets users configure Kanban organization from the sidebar as expected, avoiding confusion and failed setup changes.
Original PR description
Before this commit: In the Kanban view sidebar editor, the default group by would not show any choices. After this commit: The default group by options shows the proper field choices and choosing one updates the view. Task Id: 3274711
The mail and live chat code has been reorganized so discussion channel command logic sits with the Discuss-related components. This is an internal cleanup that should make future maintenance easier without changing the user experience.
Original PR description
Part of task-3265211
The Point of Sale app no longer loads a large shared back-office asset package that contained many files it did not need. This should make POS screens load more efficiently and reduce unwanted side effects, while keeping testing support in place.
Original PR description
pos*: l10n_ae_pos, l10n_co_pos, l10n_fr_pos_cert, l10n_gcc_pos, l10n_in_pos, l10n_sa_pos, point_of_sale, pos_adyen, pos_discount, pos_epson_printer, pos_epson_printer_restaurant, pos_hr,…
pos*: l10n_ae_pos, l10n_co_pos, l10n_fr_pos_cert, l10n_gcc_pos, l10n_in_pos, l10n_sa_pos, point_of_sale, pos_adyen, pos_discount, pos_epson_printer, pos_epson_printer_restaurant, pos_hr, pos_hr_restaurant, pos_loyalty, pos_mercury, pos_restaurant, pos_restaurant_adyen, pos_restaurant_stripe, pos_sale, pos_sale_loyalty, pos_sale_product_configurator, pos_six, pos_stripe Previously, the pos assets included almost the entirety of the assets_backend. Most of the contents of the assets_backend is completely useless in the PoS, meaning that the PoS will load slower because it loads much more JS than it needs. It also means that it gets all the side effects of this bundle (global event listeners, among other things) that we don't want. This commit removes the dependency of the pos assets on the assets_backend to solve these issues. The pos assets are now their own bundle with only what is needed in the PoS. As for the unit testing bundle, the same logic applies but unfortunately, because the unit testing code from web that we want to use (eg automatic cleanups, cleaning of registries, etc) depends on the legacy code, we need to include a lot more files than would otherwise be needed. This situation will probably be improved as legacy code is removed from web, but in the mean time, it is not very important for this bundle to be lean, as it's a test bundle and loading speed is less important. Linked to: https://github.com/odoo/enterprise/pull/40502 Linked to: odoo/upgrade#4626
Spreadsheet pivot tables, lists, and charts now manage their temporary data connections in the user interface layer instead of the shared document core. This keeps document data cleaner, reduces unnecessary internal mapping, and helps avoid user-specific data details being stored or exchanged where they do not belong.
Original PR description
Before this commit, the pivot's dataSources were managed by the core plugin Pivot/ListCorePlugin. This didn't make sense since dataSources aren't core data: they are neither exported nor imported…
Before this commit, the pivot's dataSources were managed by the core plugin Pivot/ListCorePlugin. This didn't make sense since dataSources aren't core data: they are neither exported nor imported they can be different for each user (their ids were generated via uuidv4 at import) managing them required to handle local command in the core plugin Moved the dataSources management to the UI plugin Pivot/ListUIPlugin and moved the relevant getters inside this plugin. Changed the ids of the dataSources to be the same as the pivot's id + a prefix, to avoid having to maintain a mapping pivot/listId <=> dataSourceId . This commit also removes the dataSourceId from the INSERT_PIVOT/LIST command, which have no place here since this is a core command and the dataSources are now a pure UI concept. This is slighly more tricky for pivots than for lists, because the datasource need to be loaded before the INSERT_PIVOT command to fetch the table structure. The component dispatching the command need to make sure it creates a dataSource with the id given by the getter getPivotDataSourceId, or else the dataSource will be loaded twice. Task: [3293491](https://www.odoo.com/web#id=3293491&menu_id=4720&cids=1&action=333&active_id=2328&model=project.task&view_type=form) --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Spreadsheet pivot tables and lists now keep temporary data source details in the user interface layer instead of the shared spreadsheet core. This reduces unnecessary internal complexity and helps keep collaboration and imports more consistent without changing expected end-user features.
Original PR description
Before this commit, the pivot's dataSources were managed by the core plugin `Pivot/ListCorePlugin`. This didn't make sense since dataSources aren't core data: - they are neither exported nor imported…
Before this commit, the pivot's dataSources were managed by the core plugin `Pivot/ListCorePlugin`. This didn't make sense since dataSources aren't core data: - they are neither exported nor imported - they can be different for each user (their ids were generated via uuidv4 at import) - managing them required to handle local command in the core plugin Moved the dataSources management to the UI plugin `Pivot/ListUIPlugin` and moved the relevant getters inside this plugin. Changed the ids of the dataSources to be the same as the pivot's id + a prefix, to avoid having to maintain a mapping `pivot/listId` <=> `dataSourceId` . This commit also removes the dataSourceId from the `INSERT_PIVOT/LIST` command, which have no place here since this is a core command and the dataSources are now a pure UI concept. This is slighly more tricky for pivots than for lists, because the datasource need to be loaded before the `INSERT_PIVOT` command to fetch the table structure. The component dispatching the command need to make sure it creates a dataSource with the id given by the getter `getPivotDataSourceId`, or else the dataSource will be loaded twice. Task: [3293491](https://www.odoo.com/web#id=3293491&menu_id=4720&cids=1&action=333&active_id=2328&model=project.task&view_type=form)
Several Point of Sale-related modules were updated to use the latest shared asset bundle naming from the core Odoo platform. This keeps these apps aligned with underlying platform changes and helps ensure their screens, integrations, and tests continue loading the right resources.
Original PR description
pos*: l10n_de_pos_cert, l10n_de_pos_res_cert, l10n_mx_edi_pos, pos_hr_mobile, pos_iot, pos_l10n_se, pos_preparation_display, pos_restaurant_iot, pos_settle_due Linked to: odoo/odoo#120070
Portal shows all Sale Orders available for current user. For example, salesman can see his sales. If such a user can download digital files via product form in backend, it makes sense to let user download them via SO page on portal. However, it wasn't the case because /my/download requires product be purchased by current user [1]. Fix it by checking read access first. STEPS * in backend create SO with digital product (customer must be different from current user) * create invoice and regi
Original PR description
Portal shows all Sale Orders available for current user. For example, salesman can see his sales. If such a user can download digital files via product form in backend, it makes sense to let user…
Portal shows all Sale Orders available for current user. For example, salesman can see his sales. If such a user can download digital files via product form in backend, it makes sense to let user download them via SO page on portal. However, it wasn't the case because /my/download requires product be purchased by current user [1]. Fix it by checking read access first. STEPS * in backend create SO with digital product (customer must be different from current user) * create invoice and register a payment * navigate to portal (without using customer's token), * open SO, click download on digital product [1]: https://github.com/odoo/odoo/blob/1a24477fab4dd323cf94c010321d8942fb2c1a01/addons/website_sale_digital/models/account_invoice.py#L14-L22 opw-3144600 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 Forward-Port-Of: odoo/odoo#120580 Forward-Port-Of: odoo/odoo#112639
Adapting the field faq to the new sanitize api of 16.0 Forward-Port-Of: odoo/odoo#119369
Original PR description
Adapting the field faq to the new sanitize api of 16.0 Forward-Port-Of: odoo/odoo#119369
before this commit: after #109858 The method `update_field_translations` won't directly call the `write` As a result, when changing the translation of fields from translation dialog, the orm cache won't be cleared, and translations won't be updated in views even after refresh the page after this commit: when uesrs translate fields and refresh the page, the new translation can be updated in new views opw-3267024 Description of the issue/feature this PR addresses: Current behavior b
Original PR description
before this commit: after #109858 The method `update_field_translations` won't directly call the `write` As a result, when changing the translation of fields from translation dialog, the orm cache won't be cleared, and translations won't be updated in views even after refresh the page after this commit: when uesrs translate fields and refresh the page, the new translation can be updated in new views opw-3267024 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 Forward-Port-Of: odoo/odoo#120493 Forward-Port-Of: odoo/odoo#118924
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 Forward-Port-Of: odoo/odoo#119586
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 Forward-Port-Of: odoo/odoo#119586
Steps to reproduce ================== - Install Time Off - With Mitchell Admin, set notifications to "Handle in Odoo" - With Marc Demo, create a few Holidays requests - Switch back to Mitchell Admin - Open enough chat windows from the menu in the navbar so that it fills the entire window When there is no place left, we get this error ``` Cannot read properties of undefined (reading 'localMessageUnreadCounter') ``` Cause of the issue ================== Threads related to ti
Original PR description
Steps to reproduce ================== - Install Time Off - With Mitchell Admin, set notifications to "Handle in Odoo" - With Marc Demo, create a few Holidays requests - Switch back to Mitchell Admin - Open enough chat windows from the menu in the navbar so that it fills the entire window When there is no place left, we get this error ``` Cannot read properties of undefined (reading 'localMessageUnreadCounter') ``` Cause of the issue ================== Threads related to time off have no channel opw-3204260 Forward-Port-Of: odoo/odoo#120418
The activity view is an aggregation view, meaning that we show all the activities with no limit of records. Steps to reproduce: There is no easy way to reproduce the bug, the database should be populated with more than 80 records in a model and have an activity planned for the 81th record. Current Behaviour: The Activity view loads all the activities without limit and so the activity for the 81th record. The problem is that the 81th record does not have been loaded due to the default lim
Original PR description
The activity view is an aggregation view, meaning that we show all the activities with no limit of records. Steps to reproduce: There is no easy way to reproduce the bug, the database should be populated with more than 80 records in a model and have an activity planned for the 81th record. Current Behaviour: The Activity view loads all the activities without limit and so the activity for the 81th record. The problem is that the 81th record does not have been loaded due to the default limit of the RelationaLModel. Therefore the activity view crash because it cannot fetch the missing record for a loaded activity. Expected Behaviour: The activity view loads all the activities but also loads all the records so it can render them. Forward-Port-Of: odoo/odoo#120623
Issue: A user has write access rights to modify his own attendances. However, he can modify the `employee_id` field. This can cause attendances to be moved to other employees. opw-3280850 Forward-Port-Of: odoo/odoo#120540 Forward-Port-Of: odoo/odoo#120410
Original PR description
Issue: A user has write access rights to modify his own attendances. However, he can modify the `employee_id` field. This can cause attendances to be moved to other employees. opw-3280850 Forward-Port-Of: odoo/odoo#120540 Forward-Port-Of: odoo/odoo#120410
When settling a sale.order from the pos app, it's possible that the sale.order have different partners assigned to it (partner_id, partner_shipping_id, partner_invoice_id). After this commit, we are now properly assigning these partners to the generated invoice. Additionally, this commit makes the settling of sale.order more robust by avoiding issue on having multiple incompatible sale.orders in a pos.order (more than 2 sale.orders and their partners are not the same). After this commit,
Original PR description
When settling a sale.order from the pos app, it's possible that the sale.order have different partners assigned to it (partner_id, partner_shipping_id, partner_invoice_id). After this commit, we are…
When settling a sale.order from the pos app, it's possible that the sale.order have different partners assigned to it (partner_id, partner_shipping_id, partner_invoice_id). After this commit, we are now properly assigning these partners to the generated invoice. Additionally, this commit makes the settling of sale.order more robust by avoiding issue on having multiple incompatible sale.orders in a pos.order (more than 2 sale.orders and their partners are not the same). After this commit, we are only reusing the current pos.order as container of the new sale.order to settle if the sale.order is compatible to the current pos.order. Basically, we now only allow adding new sale order to the current order if the partner_id, partner_invoice_id and partner_shipping_id of the new sale.order are the same to the current pos.order's linked sale.order. In other words, if the new sale.order to settle is incompatible to the current pos.order, we create a new pos.order to settle that sale.order. --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr Forward-Port-Of: odoo/odoo#120575 Forward-Port-Of: odoo/odoo#118492
Previously, a user could link his own expenses to a expense sheet of someone else. This would not be allowed upon creation but was allowed when updating the values of the expense. This commit add a simple check at the beginning of the write() Forward-Port-Of: odoo/odoo#120610 Forward-Port-Of: odoo/odoo#120008
Original PR description
Previously, a user could link his own expenses to a expense sheet of someone else. This would not be allowed upon creation but was allowed when updating the values of the expense. This commit add a simple check at the beginning of the write() Forward-Port-Of: odoo/odoo#120610 Forward-Port-Of: odoo/odoo#120008
l10n_in_edi: Before this commit : In Accounting settings the documentation link no longer works. After this commit : In Accounting settings the documentation link is updated and works. l10n_id_edi_ewaybill: Before this commit : In Accounting settings the documentation link no longer works. After this commit : In Accounting settings the documentation link is updated and works. task-3247082 Forward-Port-Of: odoo/odoo#119453 Forward-Port-Of: odoo/odoo#117096
Original PR description
l10n_in_edi: Before this commit : In Accounting settings the documentation link no longer works. After this commit : In Accounting settings the documentation link is updated and works. l10n_id_edi_ewaybill: Before this commit : In Accounting settings the documentation link no longer works. After this commit : In Accounting settings the documentation link is updated and works. task-3247082 Forward-Port-Of: odoo/odoo#119453 Forward-Port-Of: odoo/odoo#117096
Before PR: --- Rounding is not considered in the JSON data in total invoice value. After PR: --- Rounding is considered in the total invoice value in JSON data. Task id: 3276310 Forward-Port-Of: odoo/odoo#118904
Original PR description
Before PR: --- Rounding is not considered in the JSON data in total invoice value. After PR: --- Rounding is considered in the total invoice value in JSON data. Task id: 3276310 Forward-Port-Of: odoo/odoo#118904
In this commit, when user has created a transporter from the invoice view and if it's forget to enter GSTIN Then we throws error to set GSTIN in transporter transporter always have GSTIN, without having GSTIN any one is not allowed to transport goods in India. task - 3262215 Forward-Port-Of: odoo/odoo#117658
Original PR description
In this commit, when user has created a transporter from the invoice view and if it's forget to enter GSTIN Then we throws error to set GSTIN in transporter transporter always have GSTIN, without having GSTIN any one is not allowed to transport goods in India. task - 3262215 Forward-Port-Of: odoo/odoo#117658
- ensure `test_module_operations` exits with a non-zero status on failure, as the current makes it a lot less convenient to notice uninstall / reinstall errors (especially with lots of warnings crowding the logs) - allow uninstalling without reinstalling, so it's easier to inspect db state after uninstall - improve CLI (add subcommands support) - improve logger configuration (and silence the very noisy ones which mostly exist for post-mortem analysis) Forward-Port-Of: odoo/odoo#119848 Forwar
Original PR description
- ensure `test_module_operations` exits with a non-zero status on failure, as the current makes it a lot less convenient to notice uninstall / reinstall errors (especially with lots of warnings crowding the logs) - allow uninstalling without reinstalling, so it's easier to inspect db state after uninstall - improve CLI (add subcommands support) - improve logger configuration (and silence the very noisy ones which mostly exist for post-mortem analysis) Forward-Port-Of: odoo/odoo#119848 Forward-Port-Of: odoo/odoo#118332
Steps to reproduce ================== - Open a product form view - Enter .5 in the Cost field It is parsed as 5 but it should be 0.5 Cause of the issue ================== When trying to strip the currency symbol from the input, the leading decimal separator was also removed Solution ======== Adapt the regex by adding the decimal separator in the list of characters to not exclude opw-3270039 Forward-Port-Of: odoo/odoo#119651
Original PR description
Steps to reproduce ================== - Open a product form view - Enter .5 in the Cost field It is parsed as 5 but it should be 0.5 Cause of the issue ================== When trying to strip the currency symbol from the input, the leading decimal separator was also removed Solution ======== Adapt the regex by adding the decimal separator in the list of characters to not exclude opw-3270039 Forward-Port-Of: odoo/odoo#119651
The documentation PR https://github.com/odoo/documentation/pull/4315/ adds a new doc page about cookies bars. This commit adds a link in the Website settings, next to the cookies bar feature. Forward-Port-Of: odoo/odoo#120688 Forward-Port-Of: odoo/odoo#120639
Original PR description
The documentation PR https://github.com/odoo/documentation/pull/4315/ adds a new doc page about cookies bars. This commit adds a link in the Website settings, next to the cookies bar feature. Forward-Port-Of: odoo/odoo#120688 Forward-Port-Of: odoo/odoo#120639
Currently `report.stock.quantity` has a field defined in it called `move_ids`: `move_ids = fields.One2many('stock.move',readonly=True)` This virtual field has no corresponding inverse field so when performing a search_read on the model, it fails in fields.py when trying to do: `inverse_field = comodel._fields[inverse]` In addition, this field is apparently not used anywhere in the source code and not queried in the SQL View. This means the model can never be search_read by default.
Original PR description
Currently `report.stock.quantity` has a field defined in it called `move_ids`:
`move_ids = fields.One2many('stock.move',readonly=True)`
This virtual field has no corresponding inverse field so when performing a search_read on the model, it fails
in fields.py when trying to do: `inverse_field = comodel._fields[inverse]`
In addition, this field is apparently not used anywhere in the source code and not queried in the SQL View.
This means the model can never be search_read by default.
Since this field is never used, it isn't stored, and the model is `_auto = False`, removing it won't break any database.
Forward-Port-Of: odoo/odoo#120048All to display more information on smaller screens by reducing the padding and margin of the report lines, as well as by removing the sheet completely. [opw-3251730](https://www.odoo.com/web#id=3251730&model=project.task) Forward-Port-Of: odoo/enterprise#40193
Original PR description
All to display more information on smaller screens by reducing the padding and margin of the report lines, as well as by removing the sheet completely. [opw-3251730](https://www.odoo.com/web#id=3251730&model=project.task) Forward-Port-Of: odoo/enterprise#40193
Purpose ======= If the document URL is not a valid URL (random text) we will still offer to the user the possibility to open it. Task-3283452 Forward-Port-Of: odoo/enterprise#40343
Original PR description
Purpose ======= If the document URL is not a valid URL (random text) we will still offer to the user the possibility to open it. Task-3283452 Forward-Port-Of: odoo/enterprise#40343
Before this commit ================== GSTR-2B sync creates a file in the attachment and the file name was not set correctly. After this commit ================== Set the "%s" placeholder value, now the file name is set correctly. task_id: 3276322 Forward-Port-Of: odoo/enterprise#40036
Original PR description
Before this commit ================== GSTR-2B sync creates a file in the attachment and the file name was not set correctly. After this commit ================== Set the "%s" placeholder value, now the file name is set correctly. task_id: 3276322 Forward-Port-Of: odoo/enterprise#40036
Before this commit, if the receiver contact does not have a phone number but has a mobile number, we get a validation error. It would be easier for the user, to fallback on mobile number if there was no phone number. opw-3275070 Forward-Port-Of: odoo/enterprise#40645
Original PR description
Before this commit, if the receiver contact does not have a phone number but has a mobile number, we get a validation error. It would be easier for the user, to fallback on mobile number if there was no phone number. opw-3275070 Forward-Port-Of: odoo/enterprise#40645
Purpose: - Currently, the star icon of the toggle_favorite button in the knowledge list views is green, while it is yellow in every other list view. This is because we do not use the `boolean_favorite_field` field in knowledge but a button with an action so that users can add to or remove from their favorites articles for which they only have read access. This commit adds scss style to make the star yellow in knowledge's list views (search and trashed). Task-3284518 Forward-Port-Of: odo
Original PR description
Purpose: - Currently, the star icon of the toggle_favorite button in the knowledge list views is green, while it is yellow in every other list view. This is because we do not use the `boolean_favorite_field` field in knowledge but a button with an action so that users can add to or remove from their favorites articles for which they only have read access. This commit adds scss style to make the star yellow in knowledge's list views (search and trashed). Task-3284518 Forward-Port-Of: odoo/enterprise#40164
An error occurs because in domain instead of id they receive the record set. steps to produce this error: 1) create a new subscription with recurring products and confirm that. 2) create invoice of that particular subscription with x% of amount. 3) goto "field service" app and open products from smart button. applying these changes will resolve this issue. sentry traceback: ``` InvalidTextRepresentation: invalid input syntax for type integer: "product.product(17,)" LINE 4: ...t"
Original PR description
An error occurs because in domain instead of id they receive the record set. steps to produce this error: 1) create a new subscription with recurring products and confirm that. 2) create invoice of…
An error occurs because in domain instead of id they receive the record set.
steps to produce this error:
1) create a new subscription with recurring products and confirm that.
2) create invoice of that particular subscription with x% of amount.
3) goto "field service" app and open products from smart button.
applying these changes will resolve this issue.
sentry traceback:
```
InvalidTextRepresentation: invalid input syntax for type integer: "product.product(17,)"
LINE 4: ...t"."id" IS NULL)) AND (("product_product"."id" != 'product.p...
^
File "odoo/http.py", line 2115, in __call__
response = request._serve_db()
File "odoo/http.py", line 1698, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1725, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 1922, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 154, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 715, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 28, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 24, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 457, in call_kw
result = _call_kw_model(method, model, args, kwargs)
File "odoo/api.py", line 430, in _call_kw_model
result = method(recs, *args, **kwargs)
File "addons/web/models/models.py", line 517, in search_panel_select_range
domain_image = self._search_panel_field_image(field_name,
File "addons/web/models/models.py", line 260, in _search_panel_field_image
model_domain_image = self._search_panel_domain_image(field_name, model_domain,
File "addons/web/models/models.py", line 304, in _search_panel_domain_image
groups = self.read_group(domain, [field_name], [field_name], limit=limit)
File "odoo/models.py", line 2225, in read_group
result = self._read_group_raw(domain, fields, groupby, offset=offset, limit=limit, orderby=orderby, lazy=lazy)
File "odoo/models.py", line 2356, in _read_group_raw
self._cr.execute(query, where_clause_params)
File "odoo/sql_db.py", line 311, in execute
res = self._obj.execute(query, params)
```
sentry-4051814674
Forward-Port-Of: odoo/enterprise#40748## Description This PR fixes an issue where a traceback occurs while creating a new Amazon account in the sale_amazon module. ### See ```IndexError: list index out of range File "odoo/http.py", line 2119, in __call__ response = request._serve_db() File "odoo/http.py", line 1702, in _serve_db return service_model.retrying(self._serve_ir_http, self.env) File "odoo/service/model.py", line 134, in retrying result = func() File "odoo/http.py", line 1729, in _serve_ir
Original PR description
## Description This PR fixes an issue where a traceback occurs while creating a new Amazon account in the sale_amazon module. ### See ```IndexError: list index out of range File "odoo/http.py", line…
## Description
This PR fixes an issue where a traceback occurs while creating a new Amazon
account in the sale_amazon module.
### See
```IndexError: list index out of range
File "odoo/http.py", line 2119, in __call__
response = request._serve_db()
File "odoo/http.py", line 1702, in _serve_db
return service_model.retrying(self._serve_ir_http, self.env)
File "odoo/service/model.py", line 134, in retrying
result = func()
File "odoo/http.py", line 1729, in _serve_ir_http
response = self.dispatcher.dispatch(rule.endpoint, args)
File "odoo/http.py", line 1926, in dispatch
result = self.request.registry['ir.http']._dispatch(endpoint)
File "odoo/addons/base/models/ir_http.py", line 154, in _dispatch
result = endpoint(**request.params)
File "odoo/http.py", line 719, in route_wrapper
result = endpoint(self, *args, **params_ok)
File "addons/web/controllers/dataset.py", line 28, in call_kw
return self._call_kw(model, method, args, kwargs)
File "addons/web/controllers/dataset.py", line 24, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "odoo/api.py", line 459, in call_kw
result = _call_kw_model_create(method, model, args, kwargs)
File "odoo/api.py", line 439, in _call_kw_model_create
result = method(recs, *args, **kwargs)
File "<decorator-gen-444>", line 2, in create
File "odoo/api.py", line 409, in _model_create_multi
return create(self, [arg])
File "home/odoo/src/enterprise/saas-16.2/sale_amazon/models/amazon_account.py", line 225, in create
'location_id': parent_location_data[0]['view_location_id'][0],
```
## Steps to Reproduce
- Install the `sale_amazon` module
- Create a new company and switch to it
- In the Sale app, go to Configuration, and then to the Connectors section.
- Click on Amazon Accounts.
- Click on "New", fill in the required information, and click on "Save".
- A traceback will appear.
## Cause
The traceback occurs because the "company" value is not present in the "vals"
dictionary. This is because we cannot access read-only fields during the create
method.
## Solution
To fix this issue, we added `force_save` to the company_id field.
This ensures that the "company" value is available and the traceback is avoided.
sentry-4108896286
###
Forward-Port-Of: odoo/enterprise#40349*: documents The pdf viewer sometimes displays the sidebar when we open the pdf Solution: Add pagemode=none to the url when opening a pdf in attachments opw-3193516 Closes https://github.com/odoo/odoo/pull/120530
Original PR description
*: documents The pdf viewer sometimes displays the sidebar when we open the pdf Solution: Add pagemode=none to the url when opening a pdf in attachments opw-3193516 Closes https://github.com/odoo/odoo/pull/120530
Before this PR, too many lookup on the currency rate table were performed. We chose to adopt a similar strategy than sale_report in sale module. We create a dedicated table containing the currency rates to avoid reading res_currency and res_currency_rate for each currency. This strategy does not rely on the currency-rate stored on the sale.order and therefore avoid multiple currency conversion corresponding to different rates (currency_rate is saved at sale.order confirmation). t
Original PR description
Before this PR, too many lookup on the currency rate table were performed. We chose to adopt a similar strategy than sale_report in sale module. We create a dedicated table containing the currency rates to avoid reading res_currency and res_currency_rate for each currency. This strategy does not rely on the currency-rate stored on the sale.order and therefore avoid multiple currency conversion corresponding to different rates (currency_rate is saved at sale.order confirmation). taskid: 3247318 Forward-Port-Of: odoo/enterprise#38710
task-3289145 Forward-Port-Of: odoo/enterprise#40710 Forward-Port-Of: odoo/enterprise#40658
Original PR description
task-3289145 Forward-Port-Of: odoo/enterprise#40710 Forward-Port-Of: odoo/enterprise#40658
## Current behaviour On a brand new helpdesk ticket with no assignees, when we add an user to follow the ticket with an email, there is a link "Assign to me" that is supposed to assign the newly following user as the assignee of the ticket. This link is dead, returning a 404. ## Expected behaviour Either correct the link, or remove it from the email header. ## Steps to reproduce - Install Helpdesk - Create a ticket, with no assignees - Add a new follower to the task with Send Email
Original PR description
## Current behaviour On a brand new helpdesk ticket with no assignees, when we add an user to follow the ticket with an email, there is a link "Assign to me" that is supposed to assign the newly…
## Current behaviour On a brand new helpdesk ticket with no assignees, when we add an user to follow the ticket with an email, there is a link "Assign to me" that is supposed to assign the newly following user as the assignee of the ticket. This link is dead, returning a 404. ## Expected behaviour Either correct the link, or remove it from the email header. ## Steps to reproduce - Install Helpdesk - Create a ticket, with no assignees - Add a new follower to the task with Send Email checked. - Check the outgoing email, and click on the link "Assign to me". - 404 response ## Reason for the problem The route which we were using for this `/mail/assign` doesn't exist anymore since version 15. This was an intended design change, to remove noice. The user can click on "View Helpdesk Ticket" and assign himself on there. ## Fix Remove the "Assign to me" link from the email header. Same as in PR #119821. ## Affected versions - 15.0 - saas-15.2 - 16.0 - saas-16.1 - saas-16.2 - master --- opw-3245935 Forward-Port-Of: odoo/enterprise#40708 Forward-Port-Of: odoo/enterprise#40425