diff --git a/addons/sale/views/sale_views.xml b/addons/sale/views/sale_views.xml
index e4890c305a7..ddf837f97d6 100644
--- a/addons/sale/views/sale_views.xml
+++ b/addons/sale/views/sale_views.xml
@@ -1057,6 +1057,26 @@
+
+ sale.order.line.kanban
+ sale.order.line
+
+
+
+
+
+
+
+
+
+
+
product.product.sale.order
product.product
diff --git a/addons/sale_timesheet/models/project.py b/addons/sale_timesheet/models/project.py
index 48c1bf95259..2049780ecc6 100644
--- a/addons/sale_timesheet/models/project.py
+++ b/addons/sale_timesheet/models/project.py
@@ -160,7 +160,8 @@ class ProjectTask(models.Model):
_inherit = "project.task"
# override sale_order_id and make it computed stored field instead of regular field.
- sale_order_id = fields.Many2one(compute='_compute_sale_order_id', store=True, readonly=False)
+ sale_order_id = fields.Many2one(compute='_compute_sale_order_id', store=True, readonly=False,
+ domain="['|', '|', ('partner_id', '=', partner_id), ('partner_id', 'child_of', commercial_partner_id), ('partner_id', 'parent_of', partner_id)]")
analytic_account_id = fields.Many2one('account.analytic.account', related='sale_order_id.analytic_account_id')
billable_type = fields.Selection([
('task_rate', 'At Task Rate'),
diff --git a/addons/web/static/src/js/views/kanban/kanban_column.js b/addons/web/static/src/js/views/kanban/kanban_column.js
index 229046479f4..ab994628c8c 100644
--- a/addons/web/static/src/js/views/kanban/kanban_column.js
+++ b/addons/web/static/src/js/views/kanban/kanban_column.js
@@ -74,8 +74,8 @@ var KanbanColumn = Widget.extend({
this.record_options = _.clone(recordOptions);
- if (options.grouped_by_m2o) {
- // For many2one, a false value means that the field is not set.
+ if (options.grouped_by_m2o || options.grouped_by_date ) {
+ // For many2one and datetime, a false value means that the field is not set.
this.title = value ? value : _t('Undefined');
} else {
// False and 0 might be valid values for these fields.
diff --git a/addons/web/static/src/js/views/kanban/kanban_renderer.js b/addons/web/static/src/js/views/kanban/kanban_renderer.js
index b207f7f63d3..acf3fc7d7cd 100644
--- a/addons/web/static/src/js/views/kanban/kanban_renderer.js
+++ b/addons/web/static/src/js/views/kanban/kanban_renderer.js
@@ -503,9 +503,11 @@ var KanbanRenderer = BasicRenderer.extend({
// - is a date or datetime since we group by month or
// - is readonly (on the field attrs or in the view)
var draggable = true;
+ var grouped_by_date = false;
if (groupByFieldAttrs) {
if (groupByFieldAttrs.type === "date" || groupByFieldAttrs.type === "datetime") {
draggable = false;
+ grouped_by_date = true;
} else if (groupByFieldAttrs.readonly !== undefined) {
draggable = !(groupByFieldAttrs.readonly);
}
@@ -523,6 +525,7 @@ var KanbanRenderer = BasicRenderer.extend({
group_by_tooltip: groupByTooltip,
groupedBy: groupByField,
grouped_by_m2o: this.groupedByM2O,
+ grouped_by_date: grouped_by_date,
relation: relation,
quick_create: this.quickCreateEnabled && viewUtils.isQuickCreateEnabled(state),
});