[ADD] Added 'Save As' feature to binary fields

bzr revid: fme@openerp.com-20110519134535-mjxhz0yvqlsnpsvm
This commit is contained in:
Fabien Meghazi
2011-05-19 15:45:35 +02:00
parent b722cab801
commit fa36a75353
2 changed files with 24 additions and 1 deletions
+16 -1
View File
@@ -563,13 +563,28 @@ class FormView(View):
if not id:
res = Model.default_get([field], request.context).get(field, '')
else:
res = Model.read([id], [field], request.context)[0].get(field, '')
res = Model.read([int(id)], [field], request.context)[0].get(field, '')
return base64.decodestring(res)
except:
return self.placeholder()
def placeholder(self):
return open(os.path.join(openerpweb.path_addons, 'base', 'static', 'src', 'img', 'placeholder.png'), 'rb').read()
@openerpweb.httprequest
def saveas(self, request, session_id, model, id, field, fieldname, **kw):
Model = request.session.model(model)
res = Model.read([int(id)], [field, fieldname])[0]
filecontent = res.get(field, '')
if not filecontent:
raise cherrypy.NotFound
else:
cherrypy.response.headers['Content-Type'] = 'application/octet-stream'
filename = '%s_%s' % (model.replace('.', '_'), id)
if fieldname:
filename = res.get(fieldname, '') or filename
cherrypy.response.headers['Content-Disposition'] = 'attachment; filename=' + filename
return base64.decodestring(filecontent)
@openerpweb.httprequest
def upload(self, request, session_id, callback, ufile=None):
cherrypy.response.timeout = 500
+8
View File
@@ -1196,6 +1196,7 @@ openerp.base.form.FieldBinary = openerp.base.form.Field.extend({
start: function() {
this._super.apply(this, arguments);
this.$element.find('input.oe-binary-file').change(this.on_file_change);
this.$element.find('button.oe-binary-file-save').click(this.on_save_as);
this.$element.find('.oe-binary-file-clear').click(this.on_clear);
},
set_value_from_ui: function() {
@@ -1235,6 +1236,12 @@ openerp.base.form.FieldBinary = openerp.base.form.Field.extend({
},
on_file_uploaded_and_valid: function(size, name, content_type, file_base64) {
},
on_save_as: function() {
var url = '/base/formview/saveas?session_id=' + this.session.session_id + '&model=' +
this.view.dataset.model +'&id=' + (this.view.datarecord.id || '') + '&field=' + this.name +
'&fieldname=' + (this.node.attrs.filename || '') + '&t=' + (new Date().getTime())
window.open(url);
},
on_clear: function() {
if (this.value !== false) {
this.value = false;
@@ -1266,6 +1273,7 @@ openerp.base.form.FieldBinaryFile = openerp.base.form.FieldBinary.extend({
var filename = this.node.attrs.filename;
if (this.view.fields[filename]) {
this.view.fields[filename].set_value(value);
this.view.fields[filename].on_ui_change();
}
},
on_clear: function() {