Browse Source

[ADD] Web polymorphic widget

Added a polymorphic widget based on many2one widget (different from reference field).
Use case available at https://www.openerp.com/apps/7.0/mail_organizer/
pull/4/head
Augustin Cisterne-Kaas 10 years ago
committed by Guewen Baconnier
parent
commit
f27cba95ae
  1. 21
      web_polymorphic_many2one/__init__.py
  2. 49
      web_polymorphic_many2one/__openerp__.py
  3. 64
      web_polymorphic_many2one/static/src/js/view_form.js

21
web_polymorphic_many2one/__init__.py

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (c) 2010-2014 Elico Corp. All Rights Reserved.
# Augustin Cisterne-Kaas <augustin.cisterne-kaas@elico-corp.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################

49
web_polymorphic_many2one/__openerp__.py

@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
##############################################################################
#
# OpenERP, Open Source Management Solution
# Copyright (c) 2010-2014 Elico Corp. All Rights Reserved.
# Augustin Cisterne-Kaas <augustin.cisterne-kaas@elico-corp.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
##############################################################################
{'name': 'Web Polymorphic Many2One',
'version': '0.2',
'category': 'Web',
'depends': ['web'],
'author': 'Elico Corp',
'license': 'AGPL-3',
'website': 'https://www.elico-corp.com',
'description': """
Add a new widget named "polymorphic"
The polymorphic field allow to dynamically store an id linked to any model in
OpenERP instead of the usual fixed one in the view definition
Python fields declaration:
'model': fields.many2one('ir.model', string='Model'),
'object_id': fields.integer("Resource")
XML fields declaration:
<field name="model" invisible="1" />
<field name="object_id" widget="polymorphic" polymorphic="model" />
""",
'js': [
'static/src/js/view_form.js'
],
'installable': True,
'application': False}

64
web_polymorphic_many2one/static/src/js/view_form.js

@ -0,0 +1,64 @@
/******************************************************************************
*
* OpenERP, Open Source Management Solution
* Copyright (c) 2010-2014 Elico Corp. All Rights Reserved.
* Augustin Cisterne-Kaas <augustin.cisterne-kaas@elico-corp.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
******************************************************************************/
openerp.web_polymorphic = function (instance) {
instance.web.form.FieldPolymorphic = instance.web.form.FieldMany2One.extend( {
template: "FieldMany2One",
events: {
'focus input': function(e) {
this.field.relation = this.field_manager.get_field_value(this.polymorphic);
},
'click input': function(e) {
this.field.relation = this.field_manager.get_field_value(this.polymorphic);
}
},
init: function(field_manager, node) {
this._super(field_manager, node);
this.polymorphic = this.node.attrs.polymorphic;
},
render_editable: function() {
var self = this;
this.$drop_down = this.$el.find(".oe_m2o_drop_down_button");
this.$drop_down.click(function() {
self.polymorphic = self.node.attrs.polymorphic;
self.field.relation = self.field_manager.get_field_value(self.polymorphic);
});
this._super();
this.set_polymorphic_event();
this.set({
readonly: true
});
},
set_polymorphic_event: function() {
self = this;
this.field_manager.fields[this.polymorphic].$el.on(
'change', function(){
field_value = self.field_manager.get_field_value(self.polymorphic);
if(field_value !== false)
self.set("effective_readonly", false);
else
self.set("effective_readonly", true);
}
);
}
});
instance.web.form.widgets.add('polymorphic', 'instance.web.form.FieldPolymorphic')
};
Loading…
Cancel
Save