diff --git a/addons/base/static/src/css/base.css b/addons/base/static/src/css/base.css
index 6dcb0912247..38fbfb115ef 100644
--- a/addons/base/static/src/css/base.css
+++ b/addons/base/static/src/css/base.css
@@ -666,7 +666,7 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
}
.openerp .button span {
position: relative;
- top: -3px;
+ vertical-align: top;
}
.openerp input.field_date, .openerp input.field_datetime {
background: #fff url('../img/ui/field_calendar.png') no-repeat right center;
@@ -793,6 +793,41 @@ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,
color: black;
}
+.openerp .oe-sidebar-attachments-toolbar {
+ margin: 4px 0 0 4px;
+}
+.openerp .oe-sidebar-attachments-items {
+ clear: both;
+ padding-top: 5px !important;
+}
+.openerp .oe-sidebar-attachments-items li {
+ position: relative;
+ padding: 0 0 3px 10px !important;
+}
+.openerp .oe-sidebar-attachments-items li:hover {
+ background: #ddd;
+}
+.openerp .oe-sidebar-attachments-link {
+ display: block;
+ margin-right: 15px;
+ overflow: hidden;
+}
+.openerp .oe-sidebar-attachment-delete {
+ position: absolute;
+ right: 2px;
+ top: 1px;
+ overflow: hidden;
+ width: 15px;
+ height: 15px;
+ padding: 1px;
+ border-radius: 7px;
+ -moz-border-radius: 7px;
+ -webkit-border-radius: 7px;
+}
+.openerp .oe-sidebar-attachment-delete:hover {
+ background-color: white;
+}
+
.openerp .view-manager-main-sidebar h2 {
margin:0;
font-family: Ubuntu, Helvetica, sans-serif;
diff --git a/addons/base/static/src/img/attachments-close.png b/addons/base/static/src/img/attachments-close.png
new file mode 100644
index 00000000000..14d645534b8
Binary files /dev/null and b/addons/base/static/src/img/attachments-close.png differ
diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js
index 2053e4f2c54..89f3a91f676 100644
--- a/addons/base/static/src/js/form.js
+++ b/addons/base/static/src/js/form.js
@@ -57,7 +57,6 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
this.$element.find('#' + this.element_id + '_header button.oe_form_button_new').click(this.on_button_new);
this.view_manager.sidebar.set_toolbar(data.fields_view.toolbar);
- this.view_manager.sidebar.do_refresh.add_last(this.on_sidebar_refreshed);
},
do_show: function () {
var self = this;
@@ -99,6 +98,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
this.log("No record received");
}
this.do_update_pager(record.id == null);
+ this.do_update_sidebar();
},
on_form_changed: function(widget) {
if (widget && widget.node.attrs.on_change) {
@@ -288,6 +288,7 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
this.dataset.index = this.dataset.ids.length - 1;
this.dataset.count++;
this.do_update_pager();
+ this.do_update_sidebar();
this.notification.notify("Record created", "The record has been created with id #" + this.datarecord.id);
if (success) {
success(r);
@@ -303,9 +304,49 @@ openerp.base.FormView = openerp.base.View.extend( /** @lends openerp.base.FormV
do_cancel: function () {
this.notification.notify("Cancelling form");
},
- on_sidebar_refreshed: function(new_view) {
- var sidebar = this.view_manager.sidebar;
- // TODO: Add attachment WIP
+ do_update_sidebar: function() {
+ if (this.view_manager.action.flags.sidebar === false) {
+ return;
+ }
+ if (!this.datarecord.id) {
+ this.on_attachments_loaded([]);
+ } else {
+ this.rpc('/base/dataset/search_read', {
+ model: 'ir.attachment',
+ fields: ['name', 'url', 'type'],
+ domain: [['res_model', '=', this.dataset.model], ['res_id', '=', this.datarecord.id], ['type', 'in', ['binary', 'url']]],
+ context: this.dataset.context
+ }, this.on_attachments_loaded);
+ }
+ },
+ on_attachments_loaded: function(attachments) {
+ this.$sidebar = this.view_manager.sidebar.$element.find('.sidebar-attachments');
+ this.attachments = attachments;
+ this.$sidebar.html(QWeb.render('FormView.sidebar.attachments', this));
+ this.$sidebar.find('.oe-sidebar-attachment-delete').click(this.on_attachment_delete);
+ this.$sidebar.find('.oe-binary-file').change(this.on_attachment_changed);
+ },
+ on_attachment_changed: function(e) {
+ window[this.element_id + '_iframe'] = this.do_update_sidebar;
+ var $e = $(e.target);
+ if ($e.val() != '') {
+ this.$sidebar.find('form.oe-binary-form').submit();
+ $e.parent().find('input[type=file]').attr('disabled', 'true');
+ $e.parent().find('button').attr('disabled', 'true').find('img, span').toggle();
+ }
+ },
+ on_attachment_delete: function(e) {
+ var self = this, $e = $(e.currentTarget);
+ var name = _.trim($e.parent().find('a.oe-sidebar-attachments-link').text());
+ if (confirm("Do you really want to delete the attachment " + name + " ?")) {
+ this.rpc('/base/dataset/unlink', {
+ model: 'ir.attachment',
+ ids: [parseInt($e.attr('data-id'))]
+ }, function(r) {
+ $e.parent().remove();
+ self.notification.notify("Delete an attachment", "The attachment '" + name + "' has been deleted");
+ });
+ }
},
reload: function() {
if (this.datarecord.id) {
@@ -1251,10 +1292,14 @@ 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/binary/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);
+ if (!this.view.datarecord.id) {
+ this.notification.warn("Can't save file", "The record has not yet been saved");
+ } else {
+ var url = '/base/binary/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) {
diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js
index 612315f0ce6..b0fbe57e0f1 100644
--- a/addons/base/static/src/js/views.js
+++ b/addons/base/static/src/js/views.js
@@ -317,7 +317,7 @@ openerp.base.Sidebar = openerp.base.BaseWidget.extend({
this.$element.removeClass('closed-sidebar');
}
- this.$element.html(QWeb.render("ViewManager.sidebar.internal",this));
+ this.$element.html(QWeb.render("ViewManager.sidebar.internal", { sidebar: this, view: view }));
var self = this;
this.$element.find(".toggle-sidebar").click(function(e) {
diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml
index 2e655811d60..a240cecf24f 100644
--- a/addons/base/static/src/xml/base.xml
+++ b/addons/base/static/src/xml/base.xml
@@ -267,6 +267,41 @@
+
+ Attachments
+
+
+
+
Unhandled widget
@@ -699,16 +734,19 @@