Victor Tabuenca (OpenERP) has proposed merging 
lp:~openerp-dev/openerp-web/trunk-improve_bank_statements-vta into 
lp:openerp-web.

Requested reviews:
  Xavier (Open ERP) (xmo)

For more details, see:
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-improve_bank_statements-vta/+merge/132894

Added new widget, Many2OneButton, to Form and List views.
It's purpose is to display many2one fields differently:
- Form view, button to create a new record, using FormOpenPopup, if the field 
has no record assigned; or button to edit the assigned record.
- List view, it shows a green circle when the field has a record assigned; 
otherwise the circle is red.
-- 
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-improve_bank_statements-vta/+merge/132894
Your team OpenERP R&D Team is subscribed to branch 
lp:~openerp-dev/openerp-web/trunk-improve_bank_statements-vta.
=== modified file 'addons/web/static/src/js/view_form.js'
--- addons/web/static/src/js/view_form.js	2012-11-02 14:13:48 +0000
+++ addons/web/static/src/js/view_form.js	2012-11-05 13:23:22 +0000
@@ -3148,6 +3148,54 @@
     },
 });
 
+instance.web.form.Many2OneButton = instance.web.form.AbstractField.extend({
+    template: 'Many2OneButton',
+    init: function(field_manager, node) {
+        this._super.apply(this, arguments);
+    },
+    start: function() {
+        this._super.apply(this, arguments);
+        this.set_button();
+    },
+    set_button: function() {
+        var self = this;
+        if (this.$button) {
+            this.$button.remove();
+        }
+        this.string = this.get('value') ? _t('Edit') : _t('Create');
+        this.node.attrs.icon = this.get('value') ? '/web/static/src/img/icons/gtk-yes.png' : '/web/static/src/img/icons/gtk-no.png';
+        this.$button = $(QWeb.render('WidgetButton', {'widget': this}));
+        this.$el.append(this.$button);
+        this.$button.on('click', self.on_click);
+    },
+    on_click: function(ev) {
+        var self = this;
+        ev.stopPropagation();
+        var popup =  new instance.web.form.FormOpenPopup(this);
+        popup.show_element(
+            this.field.relation,
+            this.get('value'),
+            this.build_context(),
+            {title: this.string + ' ' +_t("Voucher: ")}
+        );
+        popup.on('create_completed write_completed', self, function(r){
+            self.set_value(r);
+        });
+    },
+    set_value: function(value_) {
+        var self = this;
+        if (value_ instanceof Array) {
+            value_ = value_[0];
+        }
+        value_ = value_ || false;
+        this.set('value', value_);
+        this.set_button();
+        if (this.is_started) {
+            this.render_value();
+        }
+     },
+});
+
 /*
 # Values: (0, 0,  { fields })    create
 #         (1, ID, { fields })    update
@@ -4332,6 +4380,7 @@
         this.dataset.create_function = function(data, sup) {
             var fct = self.options.create_function || sup;
             return fct.call(this, data).then(function(r) {
+                self.trigger('create_completed');
                 self.created_elements.push(r);
             });
         };
@@ -5130,6 +5179,7 @@
     'datetime' : 'instance.web.form.FieldDatetime',
     'selection' : 'instance.web.form.FieldSelection',
     'many2one' : 'instance.web.form.FieldMany2One',
+    'many2onebutton' : 'instance.web.form.Many2OneButton',
     'many2many' : 'instance.web.form.FieldMany2Many',
     'many2many_tags' : 'instance.web.form.FieldMany2ManyTags',
     'many2many_kanban' : 'instance.web.form.FieldMany2ManyKanban',

=== modified file 'addons/web/static/src/js/view_list.js'
--- addons/web/static/src/js/view_list.js	2012-11-02 10:46:28 +0000
+++ addons/web/static/src/js/view_list.js	2012-11-05 13:23:22 +0000
@@ -2010,6 +2010,7 @@
     'field.progressbar': 'instance.web.list.ProgressBar',
     'field.handle': 'instance.web.list.Handle',
     'button': 'instance.web.list.Button',
+    'field.many2onebutton': 'instance.web.list.Many2OneButton',
 });
 instance.web.list.columns.for_ = function (id, field, node) {
     var description = _.extend({tag: node.tag}, field, node.attrs);
@@ -2197,5 +2198,15 @@
         return '<div class="oe_list_handle">';
     }
 });
+instance.web.list.Many2OneButton = instance.web.list.Column.extend({
+    _format: function (row_data, options) {
+        if (row_data.voucher_id.value) {
+            this.icon = '/web/static/src/img/icons/gtk-yes.png';
+        } else {
+            this.icon = '/web/static/src/img/icons/gtk-no.png';
+        }
+        return QWeb.render('Many2OneButton.cell', {'widget': this});
+    },
+});
 };
 // vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

=== modified file 'addons/web/static/src/xml/base.xml'
--- addons/web/static/src/xml/base.xml	2012-11-02 10:46:28 +0000
+++ addons/web/static/src/xml/base.xml	2012-11-05 13:23:22 +0000
@@ -1029,6 +1029,13 @@
         </t>
     </span>
 </t>
+<t t-name="Many2OneButton">
+    <span class="oe_form_field">
+    </span>
+</t>
+<t t-name="Many2OneButton.cell"
+    ><img t-if="widget.icon" t-att-src="_s + widget.icon" width="16" height="16"/>
+</t>
 <t t-name="FieldMany2ManyTags">
     <div class="oe_form_field oe_tags" t-att-style="widget.node.attrs.style">
         <t t-if="! widget.get('effective_readonly')">

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to