diff options
| author | Christophe Matthieu <chm@odoo.com> | 2017-03-06 10:41:02 +0100 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2017-04-11 19:44:38 +0200 |
| commit | 09731b7860ca1c0c3b4d9c85db01e31b900e2ee0 (patch) | |
| tree | a3ed92e053ebb5b8eda7382c390ceaa2bcd3fa8b /addons/web/static/src | |
| parent | bf320d2a0dd5adf56c27bab3fae59d2536f54f00 (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')
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': {}} : []; } |
