diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py index f5384697d17..c0d89bbfbe7 100644 --- a/addons/base/controllers/main.py +++ b/addons/base/controllers/main.py @@ -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 diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js index d91fef20a43..4e67684f163 100644 --- a/addons/base/static/src/js/form.js +++ b/addons/base/static/src/js/form.js @@ -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() {