summaryrefslogtreecommitdiff
path: root/addons/base
diff options
context:
space:
mode:
authorFabien Meghazi <fme@openerp.com>2011-05-19 15:45:35 +0200
committerFabien Meghazi <fme@openerp.com>2011-05-19 15:45:35 +0200
commitfa36a7535364dcc3e94564c6db2d370cb8be2cdc (patch)
tree4268ffefe679f95b47a216a42202539ca59e319d /addons/base
parentb722cab801964b82fd773a2de15ddf4fb0119790 (diff)
[ADD] Added 'Save As' feature to binary fields
bzr revid: fme@openerp.com-20110519134535-mjxhz0yvqlsnpsvm
Diffstat (limited to 'addons/base')
-rw-r--r--addons/base/controllers/main.py17
-rw-r--r--addons/base/static/src/js/form.js8
2 files changed, 24 insertions, 1 deletions
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,7 +563,7 @@ 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()
@@ -571,6 +571,21 @@ class FormView(View):
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
headers = {}
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() {