Skip to content

Commit

Permalink
[UPD] if the groups fields is relational try to use sequence field in…
Browse files Browse the repository at this point in the history
… related model if it exists
  • Loading branch information
IJOL committed Sep 5, 2024
1 parent 92ca5b0 commit 0c3272a
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 51 deletions.
6 changes: 4 additions & 2 deletions web_timeline/README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Web timeline
============

..
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
Expand Down Expand Up @@ -69,6 +69,8 @@ the possible attributes for the tag:
+--------------------+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| colors | No | Allows to set certain specific colors if the expressed condition (JS syntax) is met. |
+--------------------+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| color_field | No | Gets the color for the bar from field named here, if specified colors are set after this color |
+--------------------+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| dependency_arrow | No | Set this attribute to a x2many field to draw arrows between the records referenced in the x2many field. |
+--------------------+-----------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Expand Down Expand Up @@ -258,7 +260,7 @@ promote its widespread use.

Current `maintainer <https://odoo-community.org/page/maintainer-role>`__:

|maintainer-tarteo|
|maintainer-tarteo|

This module is part of the `OCA/web <https://github.com/OCA/web/tree/16.0/web_timeline>`_ project on GitHub.

Expand Down
123 changes: 74 additions & 49 deletions web_timeline/static/src/js/timeline_renderer.js
Original file line number Diff line number Diff line change
Expand Up @@ -378,66 +378,91 @@ odoo.define("web_timeline.TimelineRenderer", function (require) {
* @returns {Array}
*/
split_groups: async function (events, group_bys) {
if (group_bys.length === 0) {
return events;
}
const groups = [];
groups.push({id: -1, content: _t("<b>UNASSIGNED</b>"), order: -1});
var seq = 1;
if (group_bys.length === 0) return events;

const groups = [{id: -1, content: _t("<b>UNASSIGNED</b>"), order: -1}];
let seq = 1;
const fieldCache = {};

for (const evt of events) {
const grouped_field = _.first(group_bys);
const group_name = evt[grouped_field];
if (group_name) {
if (group_name instanceof Array) {
const group = _.find(
groups,
(existing_group) => existing_group.id === group_name[0]
);
if (_.isUndefined(group)) {
// Check if group is m2m in this case add id -> value of all
// found entries.
await this._rpc({
model: this.modelName,
method: "fields_get",
args: [[grouped_field]],
if (!group_name || !(group_name instanceof Array)) continue;

const group = _.find(
groups,
(existing_group) => existing_group.id === group_name[0]
);
if (group) continue;

const fields = await this._rpc({
model: this.modelName,
method: "fields_get",
args: [[grouped_field]],
context: this.getSession().user_context,
});

const fieldType = fields[grouped_field].type;
const relation = fields[grouped_field].relation;

if (fieldType !== "many2one" && fieldType !== "many2many") {
groups.push({
id: group_name[0],
content: group_name[1],
order: seq++,
});
continue;
}

if (!fieldCache[relation]) {
fieldCache[relation] = await this._rpc({
model: relation,
method: "fields_get",
args: [[]],
context: this.getSession().user_context,
});
}

const hasSequence = "sequence" in fieldCache[relation];

if (fieldType === "many2one") {
if (hasSequence) {
const group_data = await this._rpc({
model: relation,
method: "read",
args: [group_name[0], ["sequence"]],
context: this.getSession().user_context,
});
seq = group_data[0].sequence || seq;
}
groups.push({
id: group_name[0],
content: group_name[1],
order: seq++,
});
} else if (fieldType === "many2many") {
const list_values = await this.get_m2m_grouping_datas(
relation,
group_name
);
for (const vals of list_values) {
if (groups.some((gr) => gr.id === vals.id)) continue;
if (hasSequence) {
const group_data = await this._rpc({
model: relation,
method: "read",
args: [vals.id, ["sequence"]],
context: this.getSession().user_context,
}).then(async (fields) => {
if (fields[grouped_field].type === "many2many") {
const list_values =
await this.get_m2m_grouping_datas(
fields[grouped_field].relation,
group_name
);
for (const vals of list_values) {
let is_inside = false;
for (const gr of groups) {
if (vals.id === gr.id) {
is_inside = true;
break;
}
}
if (!is_inside) {
vals.order = seq;
seq += 1;
groups.push(vals);
}
}
} else {
groups.push({
id: group_name[0],
content: group_name[1],
order: seq,
});
seq += 1;
}
});
seq = group_data[0].sequence || seq;
}
vals.order = seq++;
groups.push(vals);
}
}
}
return groups;
},

get_m2m_grouping_datas: async function (model, group_name) {
const groups = [];
for (const gr of group_name) {
Expand Down

0 comments on commit 0c3272a

Please sign in to comment.