From a246acc15a9b63793b4b4fa2427f6bd27de341b5 Mon Sep 17 00:00:00 2001 From: Augustin Cisterne-Kaas Date: Wed, 12 Mar 2014 22:22:07 +0800 Subject: [PATCH 1/3] [ADD] Web polymorphic widget --- web_polymorphic/__init__.py | 21 ++++++++++ web_polymorphic/__openerp__.py | 43 ++++++++++++++++++++ web_polymorphic/static/src/js/view_form.js | 47 ++++++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100755 web_polymorphic/__init__.py create mode 100755 web_polymorphic/__openerp__.py create mode 100755 web_polymorphic/static/src/js/view_form.js diff --git a/web_polymorphic/__init__.py b/web_polymorphic/__init__.py new file mode 100755 index 00000000..50153bfb --- /dev/null +++ b/web_polymorphic/__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 +# +# 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 . +# +############################################################################## diff --git a/web_polymorphic/__openerp__.py b/web_polymorphic/__openerp__.py new file mode 100755 index 00000000..9da121e0 --- /dev/null +++ b/web_polymorphic/__openerp__.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (c) 2010-2014 Elico Corp. All Rights Reserved. +# Augustin Cisterne-Kaas +# +# 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 . +# +############################################################################## +{'name': 'Web Polymorphic', + 'version': '0.1', + '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 + +E.g: + + + +""", + 'js': [ + 'static/src/js/view_form.js' + ], + 'installable': True, + 'application': False} diff --git a/web_polymorphic/static/src/js/view_form.js b/web_polymorphic/static/src/js/view_form.js new file mode 100755 index 00000000..bb51738d --- /dev/null +++ b/web_polymorphic/static/src/js/view_form.js @@ -0,0 +1,47 @@ +/****************************************************************************** +* +* OpenERP, Open Source Management Solution +* Copyright (c) 2010-2014 Elico Corp. All Rights Reserved. +* Augustin Cisterne-Kaas +* +* 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 . +* +******************************************************************************/ +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(); + } + }); + instance.web.form.widgets.add('polymorphic', 'instance.web.form.FieldPolymorphic') +}; From d5e4988657e9336e908fbf112cf584336ec55761 Mon Sep 17 00:00:00 2001 From: Augustin Cisterne-Kaas Date: Thu, 13 Mar 2014 22:58:40 +0800 Subject: [PATCH 2/3] [FIX] polymorphic widget is set to readonly if linked model value is none --- .../__init__.py | 0 .../__openerp__.py | 0 .../static/src/js/view_form.js | 17 +++++++++++++++++ 3 files changed, 17 insertions(+) rename {web_polymorphic => web_many2one_polymorphic}/__init__.py (100%) rename {web_polymorphic => web_many2one_polymorphic}/__openerp__.py (100%) rename {web_polymorphic => web_many2one_polymorphic}/static/src/js/view_form.js (78%) diff --git a/web_polymorphic/__init__.py b/web_many2one_polymorphic/__init__.py similarity index 100% rename from web_polymorphic/__init__.py rename to web_many2one_polymorphic/__init__.py diff --git a/web_polymorphic/__openerp__.py b/web_many2one_polymorphic/__openerp__.py similarity index 100% rename from web_polymorphic/__openerp__.py rename to web_many2one_polymorphic/__openerp__.py diff --git a/web_polymorphic/static/src/js/view_form.js b/web_many2one_polymorphic/static/src/js/view_form.js similarity index 78% rename from web_polymorphic/static/src/js/view_form.js rename to web_many2one_polymorphic/static/src/js/view_form.js index bb51738d..908eb9a6 100755 --- a/web_polymorphic/static/src/js/view_form.js +++ b/web_many2one_polymorphic/static/src/js/view_form.js @@ -41,6 +41,23 @@ openerp.web_polymorphic = function (instance) { 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') From 55de8b6962ac499995207e6e89c34000fc0b1b47 Mon Sep 17 00:00:00 2001 From: Augustin Cisterne-Kaas Date: Fri, 11 Apr 2014 11:01:14 +0800 Subject: [PATCH 3/3] [ADD] Fields declaration in manifest and renamed the module. --- .../__init__.py | 0 .../__openerp__.py | 16 +++++++++++----- .../static/src/js/view_form.js | 0 3 files changed, 11 insertions(+), 5 deletions(-) rename {web_many2one_polymorphic => web_polymorphic_many2one}/__init__.py (100%) rename {web_many2one_polymorphic => web_polymorphic_many2one}/__openerp__.py (81%) rename {web_many2one_polymorphic => web_polymorphic_many2one}/static/src/js/view_form.js (100%) diff --git a/web_many2one_polymorphic/__init__.py b/web_polymorphic_many2one/__init__.py similarity index 100% rename from web_many2one_polymorphic/__init__.py rename to web_polymorphic_many2one/__init__.py diff --git a/web_many2one_polymorphic/__openerp__.py b/web_polymorphic_many2one/__openerp__.py similarity index 81% rename from web_many2one_polymorphic/__openerp__.py rename to web_polymorphic_many2one/__openerp__.py index 9da121e0..7b372564 100755 --- a/web_many2one_polymorphic/__openerp__.py +++ b/web_polymorphic_many2one/__openerp__.py @@ -19,8 +19,8 @@ # along with this program. If not, see . # ############################################################################## -{'name': 'Web Polymorphic', - 'version': '0.1', +{'name': 'Web Polymorphic Many2One', + 'version': '0.2', 'category': 'Web', 'depends': ['web'], 'author': 'Elico Corp', @@ -31,10 +31,16 @@ 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 -E.g: - - +Python fields declaration: + + 'model': fields.many2one('ir.model', string='Model'), + 'object_id': fields.integer("Resource") + +XML fields declaration: + + + """, 'js': [ 'static/src/js/view_form.js' diff --git a/web_many2one_polymorphic/static/src/js/view_form.js b/web_polymorphic_many2one/static/src/js/view_form.js similarity index 100% rename from web_many2one_polymorphic/static/src/js/view_form.js rename to web_polymorphic_many2one/static/src/js/view_form.js