summaryrefslogtreecommitdiff
path: root/addons/web/static/src
diff options
context:
space:
mode:
authorChristophe Matthieu <chm@odoo.com>2017-03-06 10:41:02 +0100
committerAaron Bohy <aab@odoo.com>2017-04-11 19:44:38 +0200
commit09731b7860ca1c0c3b4d9c85db01e31b900e2ee0 (patch)
treea3ed92e053ebb5b8eda7382c390ceaa2bcd3fa8b /addons/web/static/src
parentbf320d2a0dd5adf56c27bab3fae59d2536f54f00 (diff)
[IMP] calendar change view grammar.
* Remove filter tag * Use color attribute on the view who add a filter/legend * Filter is automatically added when 'avatar_field' option is used on a field tag, and the default template display the avatar. * Can overwrite the template (add tag template who contains qweb with <t t-name="calendar-box">...</t>
Diffstat (limited to 'addons/web/static/src')
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_model.js53
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_renderer.js5
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_view.js69
3 files changed, 51 insertions, 76 deletions
diff --git a/addons/web/static/src/js/views/calendar/calendar_model.js b/addons/web/static/src/js/views/calendar/calendar_model.js
index 9e4a7df3a20..1d25fbb839f 100644
--- a/addons/web/static/src/js/views/calendar/calendar_model.js
+++ b/addons/web/static/src/js/views/calendar/calendar_model.js
@@ -164,26 +164,8 @@ return AbstractModel.extend({
// fields to display color, e.g.: user_id.partner_id
this.field_color = params.field_color;
if (!this.preload_def) {
- var def;
- if (this.field_color) {
- var fields = this.field_color.split('.');
- if (fields.length > 1) {
- def = new $.Deferred();
- if (!this.model_color) {
- var dataset = new data.DataSetSearch(this, this.fields[fields[0]].relation, params.context, []);
- this.loadFieldView(dataset, false, 'form').then(function (fieldView) {
- self.model_color = fieldView.fields[fields[1]].relation;
- def.resolve();
- });
- } else {
- def.resolve();
- }
- }
- }
-
this.preload_def = $.Deferred();
$.when(
- def,
this.performModelRPC(this.modelName, 'check_access_rights', ["write", false]),
this.performModelRPC(this.modelName, 'check_access_rights', ["create", false]))
.then(function (write, create) {
@@ -401,32 +383,12 @@ return AbstractModel.extend({
*/
_loadColors: function (element, events) {
if (this.field_color) {
- var fields = this.field_color.split('.');
- var first = fields[0];
- var self = this;
-
- if (fields.length === 1) {
- _.each(events, function (event) {
- var value = event.record[first];
- event.color_index = _.isArray(value) ? value[0] : value;
- });
- this.model_color = this.fields[first].relation || element.model;
- } else {
- var model = this.fields[first].relation;
- var ids = [];
- _.each(events, function (event) {
- ids.push(event.record[first][0]);
- });
- ids = _.uniq(ids);
-
- return self.performModelRPC(model, 'read', [ids, [fields[1]]]).then(function (res) {
- res = _.object(_.pluck(res, ['id']), _.pluck(res, [fields[1]]));
- _.each(events, function (event) {
- var value = res[event.record[first][0]];
- event.color_index = _.isArray(value) ? value[0] : value;
- });
- });
- }
+ var fieldName = this.field_color;
+ _.each(events, function (event) {
+ var value = event.record[fieldName];
+ event.color_index = _.isArray(value) ? value[0] : value;
+ });
+ this.model_color = this.fields[fieldName].relation || element.model;
}
return $.Deferred().resolve();
},
@@ -498,6 +460,7 @@ return AbstractModel.extend({
var self = this;
var new_filters = {};
var to_read = {};
+
_.each(this.data.filters, function (filter, fieldName) {
var field = self.fields[fieldName];
@@ -526,7 +489,7 @@ return AbstractModel.extend({
_.each(data, function (_value) {
var value = _.isArray(_value) ? _value[0] : _value;
fs.push({
- 'color': self.model_color === (field.relation || element.model) ? value : false,
+ 'color_index': self.model_color === (field.relation || element.model) ? value : false,
'value': value,
'label': field_utils.format[field.type](_value, field),
'avatar_model': field.relation || element.model,
diff --git a/addons/web/static/src/js/views/calendar/calendar_renderer.js b/addons/web/static/src/js/views/calendar/calendar_renderer.js
index 1807f900882..adea44e8f96 100644
--- a/addons/web/static/src/js/views/calendar/calendar_renderer.js
+++ b/addons/web/static/src/js/views/calendar/calendar_renderer.js
@@ -151,11 +151,6 @@ return AbstractRenderer.extend({
if (params.eventTemplate) {
this.qweb = new QWeb(session.debug, {_s: session.origin});
- params.eventTemplate.children = [{
- 'tag': "t",
- 'attrs': {'t-name': "calendar-box"},
- 'children': params.eventTemplate.children
- }];
this.qweb.add_template(utils.json_node_to_xml(params.eventTemplate));
}
},
diff --git a/addons/web/static/src/js/views/calendar/calendar_view.js b/addons/web/static/src/js/views/calendar/calendar_view.js
index 288e908797c..f72dc8e640e 100644
--- a/addons/web/static/src/js/views/calendar/calendar_view.js
+++ b/addons/web/static/src/js/views/calendar/calendar_view.js
@@ -31,7 +31,7 @@ var CalendarView = AbstractView.extend({
var attrs = arch.attrs;
if (!attrs.date_start) {
- throw new Error(_t("Calendar view has not defined 'date_start' attribute."));
+ throw new Error(_lt("Calendar view has not defined 'date_start' attribute."));
}
var mapping = {};
@@ -46,42 +46,59 @@ var CalendarView = AbstractView.extend({
}
});
- if (attrs.color) {
- fieldNames.push(attrs.color.split('.')[0]);
- }
+ var filters = {};
var eventLimit = attrs.event_limit !== null && (isNaN(+attrs.event_limit) ? _.str.toBool(attrs.event_limit) : +attrs.event_limit);
- var filters = {};
-
+ var modelFilters = [];
_.each(arch.children, function (child) {
- switch (child.tag) {
- case "filter":
- if (params.sidebar === false) break; // if we have not sidebar, (eg: Dashboard), we don't use the filter "coworkers"
- var fieldName = child.attrs.name;
- filters[fieldName] = {
+ if (child.tag !== 'field') return;
+ var fieldName = child.attrs.name;
+ fieldNames.push(fieldName);
+ if (!child.attrs.invisible) {
+ displayFields[fieldName] = child.attrs;
+
+ if (params.sidebar === false) return; // if we have not sidebar, (eg: Dashboard), we don't use the filter "coworkers"
+
+ if (child.attrs.avatar_field) {
+ filters[fieldName] = filters[fieldName] || {
+ 'title': fields[fieldName].string,
+ 'fieldName': fieldName,
+ 'filters': [],
+ };
+ filters[fieldName].avatar_field = child.attrs.avatar_field;
+ filters[fieldName].avatar_model = fields[fieldName].relation;
+ }
+ if (child.attrs.write_model) {
+ filters[fieldName] = filters[fieldName] || {
'title': fields[fieldName].string,
'fieldName': fieldName,
'filters': [],
};
- if (child.attrs.avatar_field) {
- filters[fieldName].avatar_field = child.attrs.avatar_field;
- filters[fieldName].avatar_model = fields[fieldName].relation;
- }
- if (child.attrs.write_model) {
- filters[fieldName].write_model = child.attrs.write_model;
- filters[fieldName].write_field = child.attrs.write_field; // can't use a x2many fields
- }
- fieldNames.push(child.attrs.name);
- break;
- case "field":
- fieldNames.push(child.attrs.name);
- if (!child.attrs.invisible) {
- displayFields[child.attrs.name] = child.attrs;
- }
+ filters[fieldName].write_model = child.attrs.write_model;
+ filters[fieldName].write_field = child.attrs.write_field; // can't use a x2many fields
+
+ modelFilters.push(fields[fieldName].relation);
+ }
}
});
+ if (attrs.color) {
+ var fieldName = attrs.color;
+ fieldNames.push(fieldName);
+ filters[fieldName] = {
+ 'title': fields[fieldName].string,
+ 'fieldName': fieldName,
+ 'filters': [],
+ };
+ if (fields[fieldName].relation) {
+ if (['res.users', 'res.partner'].indexOf(fields[fieldName].relation) !== -1) {
+ filters[fieldName].avatar_field = 'image_small';
+ }
+ filters[fieldName].avatar_model = fields[fieldName].relation;
+ }
+ }
+
if (_.isEmpty(displayFields)) {
displayFields = fields.display_name ? {'display_name': {}} : [];
}