[ADD] handling of binary fields to the listview
bzr revid: xmo@openerp.com-20120110153905-zxqkze9c4zrkmv2a
This commit is contained in:
parent
4cc9cb83ce
commit
d98b8b8be0
|
@ -1201,10 +1201,13 @@ class Binary(openerpweb.Controller):
|
||||||
"""
|
"""
|
||||||
Model = req.session.model(model)
|
Model = req.session.model(model)
|
||||||
context = req.session.eval_context(req.context)
|
context = req.session.eval_context(req.context)
|
||||||
|
fields = [field]
|
||||||
|
if filename_field:
|
||||||
|
fields.append(filename_field)
|
||||||
if id:
|
if id:
|
||||||
res = Model.read([int(id)], [field, filename_field], context)[0]
|
res = Model.read([int(id)], fields, context)[0]
|
||||||
else:
|
else:
|
||||||
res = Model.default_get([field, filename_field], context)
|
res = Model.default_get(fields, context)
|
||||||
filecontent = base64.b64decode(res.get(field, ''))
|
filecontent = base64.b64decode(res.get(field, ''))
|
||||||
if not filecontent:
|
if not filecontent:
|
||||||
return req.not_found()
|
return req.not_found()
|
||||||
|
|
|
@ -237,7 +237,15 @@ openerp.web.auto_date_to_str = function(value, type) {
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Formats a provided cell based on its field type
|
* Formats a provided cell based on its field type. Most of the field types
|
||||||
|
* return a correctly formatted value, but some tags and fields are
|
||||||
|
* special-cased in their handling:
|
||||||
|
*
|
||||||
|
* * buttons will return an actual ``<button>`` tag with a bunch of error handling
|
||||||
|
*
|
||||||
|
* * boolean fields will return a checkbox input, potentially disabled
|
||||||
|
*
|
||||||
|
* * binary fields will return a link to download the binary data as a file
|
||||||
*
|
*
|
||||||
* @param {Object} row_data record whose values should be displayed in the cell
|
* @param {Object} row_data record whose values should be displayed in the cell
|
||||||
* @param {Object} column column descriptor
|
* @param {Object} column column descriptor
|
||||||
|
@ -245,21 +253,21 @@ openerp.web.auto_date_to_str = function(value, type) {
|
||||||
* @param {String} column.type widget type for a field control
|
* @param {String} column.type widget type for a field control
|
||||||
* @param {String} [column.string] button label
|
* @param {String} [column.string] button label
|
||||||
* @param {String} [column.icon] button icon
|
* @param {String} [column.icon] button icon
|
||||||
* @param {String} [value_if_empty=''] what to display if the field's value is ``false``
|
* @param {Object} [options]
|
||||||
* @param {Boolean} [process_modifiers=true] should the modifiers be computed ?
|
* @param {String} [options.value_if_empty=''] what to display if the field's value is ``false``
|
||||||
|
* @param {Boolean} [options.process_modifiers=true] should the modifiers be computed ?
|
||||||
|
* @param {String} [options.model] current record's model
|
||||||
|
* @param {Number} [options.id] current record's id
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
openerp.web.format_cell = function (row_data, column, value_if_empty, process_modifiers) {
|
openerp.web.format_cell = function (row_data, column, options) {
|
||||||
|
options = options || {};
|
||||||
var attrs = {};
|
var attrs = {};
|
||||||
if (process_modifiers !== false) {
|
if (options.process_modifiers !== false) {
|
||||||
attrs = column.modifiers_for(row_data);
|
attrs = column.modifiers_for(row_data);
|
||||||
}
|
}
|
||||||
if (attrs.invisible) { return ''; }
|
if (attrs.invisible) { return ''; }
|
||||||
|
|
||||||
if (column.type === "boolean") {
|
|
||||||
return _.str.sprintf('<input type="checkbox" %s disabled="disabled"/>',
|
|
||||||
row_data[column.id].value ? 'checked="checked"' : '');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (column.tag === 'button') {
|
if (column.tag === 'button') {
|
||||||
return _.template('<button type="button" title="<%-title%>" <%=additional_attributes%> >' +
|
return _.template('<button type="button" title="<%-title%>" <%=additional_attributes%> >' +
|
||||||
'<img src="<%-prefix%>/web/static/src/img/icons/<%-icon%>.png" alt="<%-alt%>"/>' +
|
'<img src="<%-prefix%>/web/static/src/img/icons/<%-icon%>.png" alt="<%-alt%>"/>' +
|
||||||
|
@ -269,14 +277,29 @@ openerp.web.format_cell = function (row_data, column, value_if_empty, process_mo
|
||||||
'disabled="disabled" class="oe-listview-button-disabled"' : '',
|
'disabled="disabled" class="oe-listview-button-disabled"' : '',
|
||||||
prefix: openerp.connection.prefix,
|
prefix: openerp.connection.prefix,
|
||||||
icon: column.icon,
|
icon: column.icon,
|
||||||
alt: column.string || '',
|
alt: column.string || ''
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!row_data[column.id]) {
|
if (!row_data[column.id]) {
|
||||||
return value_if_empty === undefined ? '' : value_if_empty;
|
return options.value_if_empty === undefined ? '' : options.value_if_empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
switch (column.type) {
|
||||||
|
case "boolean":
|
||||||
|
return _.str.sprintf('<input type="checkbox" %s disabled="disabled"/>',
|
||||||
|
row_data[column.id].value ? 'checked="checked"' : '');
|
||||||
|
case "binary":
|
||||||
|
return _.str.sprintf('<a href="%(href)s">%(text)s</a> (%(size)s)', {
|
||||||
|
text: _t("Download"),
|
||||||
|
href: _.str.sprintf('/web/binary/saveas?session_id=%s&model=%s&field=%s&id=%d',
|
||||||
|
openerp.connection.session_id, options.model,
|
||||||
|
column.id, options.id),
|
||||||
|
size: row_data[column.id].value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
return openerp.web.format_value(
|
return openerp.web.format_value(
|
||||||
row_data[column.id].value, column, value_if_empty);
|
row_data[column.id].value, column, options.value_if_empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
|
@ -685,6 +685,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
|
||||||
this.display_aggregates(aggregates);
|
this.display_aggregates(aggregates);
|
||||||
},
|
},
|
||||||
display_aggregates: function (aggregation) {
|
display_aggregates: function (aggregation) {
|
||||||
|
var self = this;
|
||||||
var $footer_cells = this.$element.find('.oe-list-footer');
|
var $footer_cells = this.$element.find('.oe-list-footer');
|
||||||
_(this.aggregate_columns).each(function (column) {
|
_(this.aggregate_columns).each(function (column) {
|
||||||
if (!column['function']) {
|
if (!column['function']) {
|
||||||
|
@ -692,7 +693,10 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
|
||||||
}
|
}
|
||||||
|
|
||||||
$footer_cells.filter(_.str.sprintf('[data-field=%s]', column.id))
|
$footer_cells.filter(_.str.sprintf('[data-field=%s]', column.id))
|
||||||
.html(openerp.web.format_cell(aggregation, column, undefined, false));
|
.html(openerp.web.format_cell(aggregation, column, {
|
||||||
|
process_modifiers: false,
|
||||||
|
model: self.dataset.model
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
get_selected_ids: function() {
|
get_selected_ids: function() {
|
||||||
|
@ -846,6 +850,9 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis
|
||||||
return self.reload_record(self.records.get(record_id));
|
return self.reload_record(self.records.get(record_id));
|
||||||
}]);
|
}]);
|
||||||
})
|
})
|
||||||
|
.delegate('a', 'click', function (e) {
|
||||||
|
e.stopPropagation();
|
||||||
|
})
|
||||||
.delegate('tr', 'click', function (e) {
|
.delegate('tr', 'click', function (e) {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
var row_id = self.row_id(e.currentTarget);
|
var row_id = self.row_id(e.currentTarget);
|
||||||
|
@ -905,7 +912,10 @@ openerp.web.ListView.List = openerp.web.Class.extend( /** @lends openerp.web.Lis
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return openerp.web.format_cell(record.toForm().data, column);
|
return openerp.web.format_cell(record.toForm().data, column, {
|
||||||
|
model: this.dataset.model,
|
||||||
|
id: record.get('id')
|
||||||
|
});
|
||||||
},
|
},
|
||||||
render: function () {
|
render: function () {
|
||||||
if (this.$current) {
|
if (this.$current) {
|
||||||
|
@ -1211,7 +1221,11 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
|
||||||
return column.id === group.grouped_on; });
|
return column.id === group.grouped_on; });
|
||||||
try {
|
try {
|
||||||
$group_column.html(openerp.web.format_cell(
|
$group_column.html(openerp.web.format_cell(
|
||||||
row_data, group_column, _t("Undefined"), false));
|
row_data, group_column, {
|
||||||
|
value_if_empty: _t("Undefined"),
|
||||||
|
process_modifiers: false,
|
||||||
|
model: self.dataset.model
|
||||||
|
}));
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
$group_column.html(row_data[group_column.id].value);
|
$group_column.html(row_data[group_column.id].value);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue