Wednesday, October 25, 2023
33 changes · master
Enhancements to existing features
Website administrators can now add a new language directly from the theme settings, opening the language setup wizard from the same place they manage website appearance. Language display options are simplified when only one language is available, with improved defaults and new display choices that better support responsive website layouts.
Original PR description
This adds a button to add language in theme tab. When clicked, opens the "add a language" wizard. If the website has only one language, the options to enable language in header & footer are hidden. When a user add a language, the default behavior is Header : dropdown & Footer : inline. Inline mode for the header is no longer accepted for responsive reason. Also provides two more rendering options : Language Code and Flag + Language Code. task-3457554
Project users can now filter the Gantt view to quickly find tasks with scheduling conflicts. This makes it easier to spot and resolve planning issues without manually scanning all tasks.
Original PR description
Before this commit: no filter for conflict tasks After the commit: a filter is added for conflict task task- 3514831
Spanish tax template data has been clarified and updated, including new or adjusted tax definitions where needed. This should reduce confusion for companies using Spanish localization and improve consistency in electronic tax reporting setup.
Original PR description
Changes for taxes in template data were requested because they were confusing or new taxes needed to be created. List of changes applied: https://www.odoo.com/web#id=3395186&menu_id=4720&cids=1&action=333&active_id=967&model=project.task&view_type=form --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Improves the experience of creating website pages from templates by making more content blocks show accurate previews while dragging or selecting them. It also cleans up related setup code and avoids unnecessary external map loading during tests, making the feature more reliable without changing the core page-building workflow.
Original PR description
This PR contains multiple improvements related to new page from template: - generalize default content for blocks so that they also appear during drag'n'drop (instead of patching them specifically so that they work for the "new page" feature) - simplify code: remove double dialog opening guard, remove async Promise executor - remove some useless XML in templates Related: https://github.com/odoo/design-themes/pull/726 task-3555325
Users can now manage notification behavior separately for each Discuss channel, including muting channels for a chosen period or limiting alerts to mentions. This helps reduce noise while keeping important messages and action counters visible.
Original PR description
New fa-bell icon to manage notifications according to that channel only Options: Mute (+choose time period): No longer see the unread status: the bold text disappears and the channel name fades out. As if you are not a channel member anymore. Receive messages but without sound + only need action counter (grayed). Add a crossed-out bell icon next to the channel or user name to indicate that the channel is muted All messages: all messages sound + need action counter @Mentions: only mention sounds + need action counter Nothing (Discord-like): No sound + need action counter By default: all messages task-3328665 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Website editors can now apply customizable highlight effects to selected text, replacing the older underline toggle with a richer highlight menu. This makes it easier for users to emphasize key content visually, with controls for highlight style, color, and thickness directly in the editor.
Original PR description
The goal of this PR is to replace the "Toggle underline" option [1] from the website's text editor by a new "Highlight effects" option which should allow applying some highlights on the selected text…
The goal of this PR is to replace the "Toggle underline" option [1]
from the website's text editor by a new "Highlight effects" option which
should allow applying some highlights on the selected text and setting
their color & thickness.
For this purpose, the JS code used for text animations will be updated
to be more generic and handle text highlights too. Moreover, The "Text
Highlight" options will be applied by adding a SVG to the targeted text
element (allowing to adjust their `stroke` and `stroke-width`).
To simplify adapting highlights when the text content is updated,
we follow this generic structure:
```XML
<span class="o_text_highlight">
<span class="o_text_highlight_item">
line1-textNode1 [line1-textNode2,...]
<svg.../>
</span>
[<br/>]
<span class="o_text_highlight_item">
line2-textNode1 [line2-textNode2,...]
<svg.../>
</span>
...
</span>
```
Rendered line breaks in text nodes are detected using range client
rectangles (see: `text_processing.js` > `splitNodeLines()`), and the
highlights are updated on window resize...
We also need to adjust highlight SVGs to fit an updated text in "edit
mode" (mainly using editor's commands), a `MutationObserver` is used
for this purpose (we only redraw the SVG for each text unit).
A simple SVG path generator was implemented in this PR (see:
`text_processing.js` > `drawPath()`) to build highlights. It applies a
list of SVG path commands according to text dimensions in a specific
mode (E.g. on "pattern" mode, we repeat the same elementary path to fit
targeted text node...).
Remarks:
- The `--text-highlight-width` and `--text-highlight-color` properties
are used to control the highlight effect's thickness and color.
- We build the highlight option preview in the same way as text content.
To achieve this, a hack was used (we open the `<we-select/>` first since
we need the right `getBoundingClientRect()` dimensions to correctly draw
highlight SVGs).
[1]: Also, the text editor "Toggle strikethrough" option will be moved
to the list of highlight effects in the new option.
task-3285817 (rd-website)
task-3269759 (rd-design)
Co-authored-by: Chrysanthe(CHGO) chgo@odoo.comThe media dialog now keeps a stable size while images and documents load, making it easier for users to browse without accidental clicks or unexpected scrolling. Clearer scrolling and loading indicators, plus a disabled Add button until media is selected, help users understand what action is available next.
Original PR description
When using the media dialog, the dialog always seems glitchy as its size is always changing with the loading files. This behavior is not really convenient as it can make the user click on unwanted…
When using the media dialog, the dialog always seems glitchy as its size
is always changing with the loading files. This behavior is not really
convenient as it can make the user click on unwanted images. Another
"issue" of the current media dialog is that when loading more images,
the dialog auto-scrolls to the "Load More" button, which can make the
user miss new images and he therefore needs to revert the scroll. A last
issue encountered by the users is that some of them think that the "Add"
button in the footer is used to upload files from their device, while it
only adds the selected media to the page.
This commit improves the UX of the media dialog:
- The dialog height is now fixed and has the same size as when it is
fully filled by images.
- The top bar with the search input now stays at the top when scrolling.
- There is now a small footer under the attachments (for the Images and
Documents tabs only) and containing the following:
- When there is content to scroll, a small circle with an arrow that
scrolls one row when clicking on it.
- When there is nothing to scroll, the "Load More" button which will
load more images. When new images are loaded, if we can scroll, the
small arrow is displayed again.
- When there is nothing to scroll and to load anymore, the "All
images/documents have been loaded" text.
Note that the main goal of this footer is simply to indicate to the user
when there is still content to scroll and when he can load more files.
In order to solve the "Add" button issue, this commit also enables and
disables this button, depending on whether some media are selected:
- if a media is already selected, we can click on the button;
- if not, the button is greyed out and we cannot click on it.
task-3441587Journal item reconciliation identifiers were simplified to make accounting navigation and matching clearer. Full matches now use simpler numeric references, while partial matches use a consistent P-based format, reducing reliance on sequence setup.
Original PR description
This commit contains some misc improvements based on the 16.0 overall improvements regarding navigation and Journal Items
in account.full.reconcile, 'name' field has been removed, and the replacement for matching_number will be the SQL id instead (no more sequences)
For full reconciliations, the matching number now don't have an 'A' prefix
For partial reconciliations, the matching number will have a format of 'P{id}'
community-PR: odoo/odoo#138140
enterprise-PR: odoo/enterprise#48980
task-id: 3530458Projects can now mark timesheets as manually billable even when they are not linked to a specific sales order line. This helps businesses handle shared services such as training sessions more accurately, so consultant time can be tracked and reflected correctly in billing and reporting.
Original PR description
**Before this commit:** An internal use case of training cannot be handeled with the current ux. Basically, training is sold to customers. It is given by a consultant who needs to timesheet their time. With the current implementation, each training would generate 1 SO per customer per training. This makes it impossible to timesheet because the consultant cannot split nor multiply their time per person attending the training. Because of that, timesheets cannot be billable which leads the reporting to be inaccurate. **After this commit:** A billable project has an option 'billable manually', its timesheets are considered billed manually when the option is set. task-3565762
The invoicing flow from Projects is clearer, with updated warning messages when required conditions are not met. Sales order lines now show the related company alongside an individual customer, making it easier for users to recognize the correct customer before invoicing.
Original PR description
This commit's purpose is to ease the the flow of invoicing from the project app. The warning message when the user tries to invoice without fulfilling the condition has been updated. When the customer of an SOL is a person and belongs to a company, the company is now also shown on the sol, in addition of the name of the customer. The idea is that the user is more keen to recognize the company than just the name of the person. task-3251615
Currency exchange rates are now cached for the duration of a transaction, reducing repeated database lookups when many conversions are processed. This should improve performance in accounting, sales, projects, and related workflows without changing normal user behavior.
Original PR description
Most of the time, rates are computed in a loop by using `<res.currency>._convert`. This leads to a lot of round trips with the database. This PR is caching the value for a whole transaction. In order to do that, the non stored field `rate` has new (missing) contextual dependencies: the arguments of `_get_conversion_rate`. This allows to move the actual computation of the rate to the computed field, and `_get_conversion_rate` is now only a proxy to avoid playing with the context manually; also kept for backward compatibility. Other solutions were considered: * `ormcache`, but we want to avoid creating multiple caches and reduce the possibility to have inter dependent caches. * managing a local cache everywhere, which is cumbersome and error prone * a helper for the previous option by using a converter factory, but it is still an issue when the convert function is called from multiple call functions because the cache isn't shared then.
Odoo can now better process field visibility and editability rules that use set comparisons, supporting recent changes to how these rules are written. This helps views validate correctly and makes these conditions easier to edit in tools such as Studio.
Original PR description
The PR https://github.com/odoo/odoo/pull/104741 have recently modify how the modifiers required, readonly,
invisible, and column_invisible are defined. They are now given by Python expressions instead of domains. This will require at some point to migrate domains like [("user_ids", "in", [1, 2])] to equivalent Python expressions. For simplicity, we have chosen to translate those kind of domains using set intersections. For the last example, we get "set(user_ids).intersection([1, 2])".
In the present PR, we
- make py_js support sets and some basic set operations (e.g. intersection) (second commit)
- make easy the edition of simple set intersections in the ExpressionEditor (third commit)
- allow views to be validated if they contain fields attributes involving sets (fourth commit). This is useful in Studio for
example.
Co-authored-by: Mathieu Duckerts-Antoine <dam@odoo.com>
Co-authored-by: Christophe Matthieu <chm@odoo.com>New restaurant point-of-sale configurations now start with a default floor plan and one table, making setup faster for restaurant users. Demo and test data are adjusted so this default setup does not interfere with existing sample scenarios or automated checks.
Original PR description
In this commit a new default floor plan is added along with one table when creating a new restaurant pos_config. It ensures that the default floor is removed for the demo data and for the tests.
Users can now change how product documents are shown to customers directly from the kanban view, without opening each document form. This makes document visibility management faster for sales and website teams working with product pages.
Original PR description
Currently, users who want to change the visibility of product's documents need to open their form view and edit it. This new widget allows users to quickly edit the way a document is displayed to their customers from the product's documents kanban view.
Peppol invoice handling now uses clearer business statuses, making it easier to see whether invoices are ready, queued, pending, completed, canceled, or in error. Sales journals and customer invoice screens also gain shortcuts and filters to quickly find invoices ready to send, while demo-mode sending and phone number prefill are improved.
Original PR description
# Invoice states Structure `peppol_move_state` according to the following logic: 1. Ready to Send / Invoices confirmed addressed to partners that are Peppol valid and not in one of the other…
# Invoice states Structure `peppol_move_state` according to the following logic: 1. Ready to Send / Invoices confirmed addressed to partners that are Peppol valid and not in one of the other statuses. Default behavior upon posting such an invoice. 2. Queued / In case of asynchronous sending only, the instruction to send has been given via the Send & Print but the cron wasn't run yet. It is still possible to cancel the sending. 3. Pending Reception / Too late to cancel, synchronous or asynchronous sending makes it now impossible to cancel the sending 4. Canceled / Once asked explicitly by the user. It's instant. 5. Done / Upon confirmation or delivery received from the AP 6. Error / Upon confirmation of a notification of error received from the AP # Journal Dashboard Add an action on sale journals to open invoices that are ready to be sent via Peppol # Other improvements - Peppol ready filter in Customer Invoices view - Rename `PEPPOL state` to `Peppol status` for consistency - Pre-fill valid phone numbers in `account_peppol_phone_number` field - Fix async sending in demo mode --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Free self-service orders are now automatically marked as paid when customers are set to pay after each order. This prevents checkout confusion and avoids validation errors when a zero-value order has no payment method selected.
Original PR description
*: pos_online_payment_self_order,pos_restaurant,pos_self_order Previously, when self order was set to "pay after each" and a user ordered an order with a total of $0.00, the order was not automatically set to paid status, as is the case with point_of_sale. Now, when the self order is set to "pay after each" and an order with a total of $0.00 is placed, it will be automatically paid. Minor fixes: - A props has been removed from `ReceiptHeader` because it was causing an error in debug mode. - In point_of_sale, when an order was placed with a total of $0.00, an error was raised during validation because no payment method was selected. Now, before checking this payment method, we first check whether it exists.
This change makes it simpler to define products and their variants directly in XML data files. It reduces the need for complex technical workarounds when preparing product catalogs, making setup and module data maintenance more reliable.
Original PR description
before this commit: =================== you can not create xml record for product.template and product.product and link them for same product if you like to achieve it you need to do it like ```…
before this commit:
===================
you can not create xml record for product.template and product.product and link them for same product if you like to achieve it you need to do it like
```
<record id="product_template_1" model="product.template">
<field name="name">Box</field>
.
.
.
<field name="list_price">8000.0</field>
</record>
<record id="product_template_attribute_line_1" model="product.template.attribute.line">
<field name="product_tmpl_id" ref="product_template_1"/>
<field name="attribute_id" ref="product_attribute_color"/>
<field name="value_ids" eval="[(6, 0, [ref('product.product_attribute_value_1'), ref('product.product_attribute_value_2')])]"/>
</record>
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'product.product_template_attribute_value_1',
'record': obj().env.ref('product.product_template_attribute_line_1').product_template_value_ids[0],
'noupdate': True,
}, {
'xml_id': 'product.product_template_attribute_value_2',
'record': obj().env.ref('product.product_template_attribute_line_1').product_template_value_ids[1],
'noupdate': True,
},]"/>
</function>
<function model="ir.model.data" name="_update_xmlids">
<value model="base" eval="[{
'xml_id': 'product.product_product_red',
'record': obj().env.ref('product.product_template_1')._get_variant_for_combination( obj().env.ref('product.product_template_attribute_value_1')),
'noupdate': True,
}, {
'xml_id': 'product.product_product_4b',
'record': obj().env.ref('product.product_template_1')._get_variant_for_combination( obj().env.ref('product.product_template_attribute_value_2')),
'noupdate': True,
}]"/>
</function>
```
after this commit:
==================
you can create product.tempalte and product.product from xml file and link it manully by attribute value
like
```
<record id="product_template_1" model="product.template" context="{'create_product_product': False}">
<field name="name">Box</field>
.
.
.
<field name="list_price">8000.0</field>
</record>
<record id="product_template_attribute_line_1" model="product.template.attribute.line" context="{'create_product_product': False}">
<field name="product_tmpl_id" ref="product_template_1"/>
<field name="attribute_id" ref="product_attribute_color"/>
<field name="value_ids" eval="[(6, 0, [ref('product_attribute_value_blue'), ref('product_attribute_value_red')])]"/>
</record>
<record id="product_template_attribute_value_1" model="product.template.attribute.value">
<field name="attribute_line_id" ref="product_template_attribute_line_1"/>
<field name="product_tmpl_id" ref="product_template_1"/>
<field name="attribute_id" ref="product_attribute_color"/>
<field name="product_attribute_value_id" ref="product_attribute_value_blue"/>
</record>
<record id="product_product_blue" model="product.product">
<field name="product_tmpl_id" ref="software_reseller.product_template_1"/>
.
.
.
<field name="product_template_variant_value_ids" eval="[(6, 0, [ref('product_template_attribute_value_1')])]"/>
</record>
<record id="product_template_attribute_value_2" model="product.template.attribute.value">
<field name="attribute_line_id" ref="product_template_attribute_line_1"/>
<field name="product_tmpl_id" ref="product_template_1"/>
<field name="attribute_id" ref="product_attribute_color"/>
<field name="product_attribute_value_id" ref="product_attribute_value_red"/>
</record>
<record id="product_product_red" model="product.product">
<field name="product_tmpl_id" ref="software_reseller.product_template_1"/>
.
.
.
<field name="product_template_variant_value_ids" eval="[(6, 0, [ref('product_template_attribute_value_2')])]"/>
</record>
```
Description of the issue/feature this PR addresses:
Current behavior before PR:
Desired behavior after PR is merged:
---
I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-prProduct properties now live at the general product template level instead of on individual product variants. This aligns property management with how products are structured, reducing confusion between variant attributes and product-level properties.
Original PR description
Purpose: --------- [This commit]( https://github.com/odoo/odoo/commit/70043822103638f651a521bd2da36cfdfd86245e) added the properties field on the product.product template. However, the product.template model is more suitable to hold these properties as the product.product model already has attributes which are quite similar to properties. Task-3570286
The customer portal order details page is being aligned with subscription flows, making it easier to reuse and extend across sales and subscription-related experiences. It also improves how editable order lines and discounts are handled when customers adjust options, supporting a smoother self-service process.
Original PR description
- Refactor the "details" part of the portal view to unify with subscription as well as add different id "hooks" for inheritance. - Add function to allow line editability to be overriden. - fix: allow the discount computation to be triggered when adding an option line if the option line doesn't already have a discount. task-id : 3186629 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Accounting dashboards now guide users more directly to bills that need payment or are overdue. The updated journal item views, filters, and column layout make it easier to review due dates, discounts, and register payments for multiple items.
Original PR description
Description of the issue/feature this commit addresses: Currently, the payment registration for vendor bills is kinda hard to figure. Noticing which bills are overdue, which require a payment is not…
Description of the issue/feature this commit addresses: Currently, the payment registration for vendor bills is kinda hard to figure. Noticing which bills are overdue, which require a payment is not made so easy by the interface and could be improved. Also there is no way to register a payment for multiple lines at a time which could improve the UX. --- Desired behavior after the commit is merged : On the dashboard, all the buttons in the "Customer Invoices" and "Vendor Bills" have been renamed to remove the "Invoices" and the "Bills" inside them. The buttons "Bills to Pay" and "Late Bills" which now are "To Pay" and "Late" (see above) redirect to the Journal Items with specific filters to show only the necessary lines. The order of the columns in the Journal Items has been changed and their visibility has been changed too. The default filters of the Journal Items when coming from the dashboard buttons has been changed. Payable has been replaced by Purchases. Filters, Group by and Search by options have been added for the Due Date and the Discount Date fields in the Journal Items. --- task-3516496 --- I confirm I have signed the CLA and read the PR guidelines at www.odoo.com/submit-pr
Users can now select multiple vendor bill journal items and register payments for them in one flow, reducing manual effort. Aged Payable report amounts are clickable and open the related journal items, making it easier to identify overdue bills and act on them.
Original PR description
Description of the issue/feature this commit addresses: Currently, the payment registration for vendor bills is kinda hard to figure. Noticing which bills are overdue, which require a payment is not made so easy by the interface and could be improved. Also there is no way to register a payment for multiple lines at a time which could improve the UX. --- Desired behavior after the commit is merged : This commit makes it now possible when in the Journal Items to select multiple lines and register a payment for them which would create one payment per line selected. When inside the Aged Payable report, all amounts are clickables and send the user to the Journal Items with the proper filter to see what lines are part of that amount. When in the Journal Items, the "Create Asset" option was available in two places. It has been removed from the drop-down "Actions" button and kept in the header. --- task-3516496
Users now see a specific message when a Codabox connection cannot be recreated because consent still exists on Codabox's platform. This helps them understand that they must manually revoke the consent in Codabox before trying again, instead of seeing a generic error.
Original PR description
Steps to reproduce: - Create a first connection with Fidu Vat and Company Vat - Revoke it - It is correctly deleted from IAP - However the consent still exists on Codabox. - A generic error was presented to the user Now we display a specific error message to the user so that it can revoke its consent from Codabox's platform. Codabox does not provide an API for us to do it for the user, it must do it manually.
Deferred reports no longer show comparison options that can create misleading, non-contiguous period results. This helps users avoid confusing totals and makes deferred report figures easier to interpret.
Original PR description
We hide these comparison filters because in the case of deferred, we want to work with contiguous periods. Comparing with non-contiguous periods may result in weird behaviours such as: 1. Non-contiguous period Total = 1200 to defer from 1/1 to 12/31 Reference period = Sept Comparison with Feb | Total | Before | Feb | Sept | Later | |-------|--------|-----|------|-------| | 1200 | 100 | 100 | 100 | 300 | As we can see, the sum of the columns doesn't add up to the total column 2. Overlap periods Total = 1200 to defer from 1/1 to 12/31 Reference period = Sept Comparison with Aug -> Oct | Total | Before | Aug -> Oct | Sept | Later | |-------|--------|------------|------|-------| | 1200 | 700 | 300 | 100 | 300 | As we can see, the sum of the columns doesn't add up to the total column Therefore we hide these filters as they will lead to confusing values task-id 3566725
Recruitment resume scanning now recognizes skills made up of multiple words as complete phrases instead of splitting them into separate terms. This improves candidate profile accuracy and helps recruiters better identify relevant qualifications from OCR results.
Original PR description
Current behavior: skills with more than one word were not detected and it would search for each word in the skill as a separate skill Improved behavior: skills are now checked as a whole in the ocr results regardless of how many words described the skill Task: https://www.odoo.com/web#id=3563681&cids=1&menu_id=4720&action=333&active_id=2068&model=project.task&view_type=form
This update aligns several business features with improved analytic accounting behavior across companies. It helps reporting, budgets, timesheets, manufacturing, subscriptions, and inter-company flows use analytic accounts more consistently after core accounting changes.
Original PR description
Adapt for the changes in community, mostly in tests: * remove `company_id` from `account.analytic.plan` * read the right fields for accounts on `account.analytic.line` opw-3497653
Customers can now book more than one appointment for the same time slot when needed. This supports real-life cases like reserving appointments for multiple family members, booking several courts, or adding extra seats to an existing reservation.
Original PR description
Allow users to book multiple appointments at the same timeslot. Examples: - I book an appointment to the hairdresser for my 2 sons - I organize my own Tennis tournament and need a few courts - I already booked a table but am trying to book another one for some extra friends ... Task-3512250
Journal item matching numbers are now shown with color-coded tags, making reconciled entries easier to scan and distinguish. The update also aligns accounting report navigation and journal item behavior with recent usability improvements.
Original PR description
This commit contains some misc improvements based on the 16.0 overall improvements regarding navigation and Journal Items Matching numbers are now color-coded in the Journal Items view to improve readability In Journal Items view, if the matching number cell have a value, then a color tag will be assigned depending on the value in that cell community-PR: odoo/odoo#138140 enterprise-PR: odoo/enterprise#48980 task-id: 3530458
Task dependency links are now visible in broader task planning views such as My Tasks and All Tasks, not only within an individual project. Users also get clearer visual feedback when dependencies cannot be created because a target project has dependency tracking disabled, making planning across projects easier and less error-prone.
Original PR description
impacted modules: - web_gantt - project_enterprise Currently, the dependencies between tasks is only displayed in the Gantt view of a given project of the option 'Task dependency' is enabled on that project. This PR extends the display of task dependencies to the views "My Tasks" and "All Tasks". Implemented functionalities: - display the dependencies arrows and connectors in the 'my tasks' menu - display a red fa-ban icon if the user tries to connect a task to another one that belongs to a project on which the feature is disabled - hide the connectors on the tasks that are in a project on which the feature is disabled On top of that some improvements are also proposed in web_gantt. When a pill or a connector is dragged in the Gantt view: - When a pill is dragged: handles and connector creators of hovered pills are not displayed. - When a connector is dragged: handles and of hovered pills are not displayed. task-3092632
Project smart scheduling now handles tasks even when no hours were planned, reducing manual adjustment and making batch scheduling across projects more reliable. Time off warnings are also clearer when multiple assignees are unavailable for the same dates, and related leave detection has been corrected so requested time off is not missed.
Original PR description
- Before this commit : - When a task has mutliple assignees and that those assignees have planned/requested holidays during the same period, the warning message repeats itself : "Mitchell Admin has…
- Before this commit :
- When a task has mutliple assignees and that those assignees have
planned/requested holidays during the same period, the warning
message repeats itself : "Mitchell Admin has requested time off
from the 06/13/2023 to the 06/16/2023. Marc Demo has requested time
off from the 06/13/2023 to the 06/16/2023.". This is a bit heavy to
read and could be simplified when the holdiays planned dates are the
same.
- When the user uses the magnifier button in the gantt
view of project to schedule non-scheduled tasks, only the tasks with
planned hours are smart scheduled. The tasks without planned hours
are simply put the same day at the same time.
- After this commit :
- When a task has mutliple assignees and that those assignees have
planned/requested holidays during the same period, the message will
be : "Mitchell Admin, Marc Demo have requested time off from the
06/13/2023 to the 06/16/2023.
- Smart scheduling takes into account the non-planned hours tasks.
It does so by scheduling first all the selected tasks with planned
hours, and then schedules all the tasks without planned hours by
putting fictive planned hours for these tasks that depend on the
scale of the gantt view. The confimation wizard that appeared when
the scheduled tasks were outside of the gantt view scale has been
removed and replaced by a toast notification.
####### Precisons ######
- The smart scheduling now works even when selecting multiple tasks
(batching) EVEN if they belong to different projects. The tasks
are scheduled one projects after another, prioritizing the tasks
with allocated or remaining hours. For example, if we have project A
with task AA (allocated_hours = 2h) and task AB (allocated_hours
= 0h) and we have project B with task BA (allocated_hours = 3h) and
task BB (allocated hours = 0h), then the scheduling priority order
will be AA => BA => AB => BB.
- The precision in "week" and "month" scale is the one defined by
default (half-day) or the one selected in the studio.
- The precision in "day" scale is always a half-day
- The precision in "year" scale is always one month
- The scheduling of non-allocated hours tasks should follow the
following behaviour :
- A half day is always concening the working hours between
00:00:00 AM and 12:00:00 AM OR 12:00:00 AM and 12:00:00 PM.
The working hours inside those intervals don't matter for the
scheduling of non-allocated hours tasks. The task is also
planned only when the working hours in the half-day are fully
available. For example, if we are in "week" scale and the
precision is "half-day" then the task will be planned at the
first half day fully available (without conflicts with other
tasks).
- Another example in "year" scale : we trigger the smart
scheduling for a non-allocated hours task A in march. There is
another task B already planned until the 10th of march. Task A
will then be planned at the next full free interval => April.
task-3330290The website help center has been refreshed with updated icons and a responsive card layout. This makes support resources easier to browse across desktop and mobile devices, improving the customer self-service experience.
Original PR description
Design the new website helpdesk page with the new icons and a responsive card-layout. task-3486276 | Before | After | | -- | -- | |  |  |
The Knowledge cover image selection dialog now fits the updated media experience with a consistent height and clearer loading controls. Users can more easily browse available cover images, see when more images can be loaded, and know when all options have been shown.
Original PR description
In PR [1], the media dialog has been improved in order to make the UX better. This commit adapts the `KnowledgeCoverDialog`, in order to be compatible with the new media dialog. More precisely, these adaptations are the following: - the dialog height is now fixed and has the same size as when it is fully filled by images -> addition of the `h-100` class. - there is now a small footer displaying either an arrow to scroll, the "Load More" button or the "All images have been loaded" text. In order for this button to be updated, we need a scroll listener on the modal body and therefore we need the reference to the modal in `KnowledgeCoverSelector` (which extends `ImageSelector` and so `FileSelector`, which uses this ref)-> this commit adds this ref. [1]: https://github.com/odoo/odoo/pull/135875 task-3441587
Odoo no longer uses separate down payment products or related configuration settings, reducing setup complexity and the risk of incorrect product handling. Down payments in Sales and Point of Sale now follow the same tax and accounting logic, with lines split by tax and account combination for more accurate financial reporting.
Original PR description
- Removes down payment products and it's related settings. - Previously one down payment was created per tax(es), now it's one dp per tax(es)/account combo. - Align POS down payment behavior on SALE Community: https://github.com/odoo/odoo/pull/128421 Upgrade: https://github.com/odoo/upgrade/pull/5317 Task 3254314
Knowledge templates can now include dynamic content such as preconfigured lists or kanban views tied to the article being created. This makes templates more useful and smoother to preview, helping users start from richer ready-made structures.
Original PR description
Currently, the templates of Knowledge will only contain static html with text, images, tables, lists, etc. Now, we would like to integrate blocks that depend on a record. More specifically, we would…
Currently, the templates of Knowledge will only contain static html with text, images, tables, lists, etc. Now, we would like to integrate blocks that depend on a record. More specifically, we would like to include pre-configured templates containing a kanban or a list view of article items. To embed a kanban or list view of article items, we need to have a reference to an article (i.e: an id). The embedded view will then display all article items of that article. The issue is that, most of the time, the id we need to provide is the id of the article itself and that article may not exist yet. The other issue is that the article items we show in the preview of the templates may also not exist. Those articles will only be created when the user applies the template. To solve these issues, we need to find a way to make the templates dynamic. # Solution 1. Create a custom "behavior" for the article items. We will then be able to customize those blocks without introducing specific code in the generic component. 2. Make the article id of the embedded views optional: In the custom behavior we created, we will assign the `active_id` to the active record. We will then be able to specify a kanban or a list view in the data files. 3. Customize the HTML field of the template gallery and load variants of the behaviors: We will then be able to customize the display of each block for the preview. For the kanban and list view of article items, we will load the record of `knowledge.article.template` instead of `knowledge.article`. task-3334717