From ee6095e63ecd9b8da337e0df5499af4909adc63a Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Wed, 12 Jun 2013 18:30:41 +0200 Subject: [PATCH 1/5] [add] base_optional_quick_create --- base_optional_quick_create/AUTHORS.txt | 1 + base_optional_quick_create/__init__.py | 20 ++++++++++ base_optional_quick_create/__openerp__.py | 39 +++++++++++++++++++ base_optional_quick_create/model.py | 46 +++++++++++++++++++++++ 4 files changed, 106 insertions(+) create mode 100644 base_optional_quick_create/AUTHORS.txt create mode 100644 base_optional_quick_create/__init__.py create mode 100644 base_optional_quick_create/__openerp__.py create mode 100644 base_optional_quick_create/model.py diff --git a/base_optional_quick_create/AUTHORS.txt b/base_optional_quick_create/AUTHORS.txt new file mode 100644 index 000000000..7106ca0eb --- /dev/null +++ b/base_optional_quick_create/AUTHORS.txt @@ -0,0 +1 @@ +Lorenzo Battistini diff --git a/base_optional_quick_create/__init__.py b/base_optional_quick_create/__init__.py new file mode 100644 index 000000000..44563ef86 --- /dev/null +++ b/base_optional_quick_create/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2013 Agile Business Group sagl () +# +# 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 . +# +############################################################################## +import model diff --git a/base_optional_quick_create/__openerp__.py b/base_optional_quick_create/__openerp__.py new file mode 100644 index 000000000..5d0f9f6a0 --- /dev/null +++ b/base_optional_quick_create/__openerp__.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2013 Agile Business Group sagl () +# +# 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': "Optional quick create", + 'version': '0.1', + 'category': 'Tools', + 'description': """ + +""", + 'author': 'Agile Business Group', + 'website': 'http://www.agilebg.com', + 'license': 'AGPL-3', + "depends": ['base'], + "data": [ + ], + "demo": [], + 'test': [ + ], + "active": False, + "installable": True +} diff --git a/base_optional_quick_create/model.py b/base_optional_quick_create/model.py new file mode 100644 index 000000000..c0c9229c0 --- /dev/null +++ b/base_optional_quick_create/model.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# Copyright (C) 2013 Agile Business Group sagl () +# +# 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 . +# +############################################################################## + +from openerp.osv import orm + +class ir_model(orm.Model): + + _inherit = 'ir.model' + + def _wrap_name_create(self, old_create, model): + + def wrapper(cr, uid, name, context=None): + import pdb; pdb.set_trace() + return old_create(cr, uid, name, context=context) + + return wrapper + + def _register_hook(self, cr, ids=None): + model = 'res.partner' + model_obj = self.pool.get(model) + if not hasattr(model_obj, 'check_quick_create'): + model_obj.name_create = self._wrap_name_create(model_obj.name_create, model) + model_obj.check_quick_create = True + return True + + def name_create(self, cr, uid, name, context=None): + res = super(ir_model, self).name_create(cr, uid, name, context=context) + self._register_hook(cr, [res]) + return res From ee58f34b79f7c3bf6b50f4e631bfdcce5dc08fb3 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Wed, 12 Jun 2013 18:45:49 +0200 Subject: [PATCH 2/5] [add] working version --- base_optional_quick_create/__openerp__.py | 2 ++ base_optional_quick_create/model.py | 41 +++++++++++++++-------- base_optional_quick_create/model_view.xml | 14 ++++++++ 3 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 base_optional_quick_create/model_view.xml diff --git a/base_optional_quick_create/__openerp__.py b/base_optional_quick_create/__openerp__.py index 5d0f9f6a0..d4ee51218 100644 --- a/base_optional_quick_create/__openerp__.py +++ b/base_optional_quick_create/__openerp__.py @@ -23,6 +23,7 @@ 'version': '0.1', 'category': 'Tools', 'description': """ +https://twitter.com/nbessi/status/337869826028605441 """, 'author': 'Agile Business Group', @@ -30,6 +31,7 @@ 'license': 'AGPL-3', "depends": ['base'], "data": [ + 'model_view.xml', ], "demo": [], 'test': [ diff --git a/base_optional_quick_create/model.py b/base_optional_quick_create/model.py index c0c9229c0..ad7b2142c 100644 --- a/base_optional_quick_create/model.py +++ b/base_optional_quick_create/model.py @@ -18,29 +18,42 @@ # ############################################################################## -from openerp.osv import orm +from openerp.osv import orm, fields +from openerp import SUPERUSER_ID class ir_model(orm.Model): _inherit = 'ir.model' + + _columns = { + 'avoid_quick_create': fields.boolean('Avoid quick create'), + } def _wrap_name_create(self, old_create, model): - def wrapper(cr, uid, name, context=None): - import pdb; pdb.set_trace() - return old_create(cr, uid, name, context=context) - + raise Exception("Can't create quickly. Opening create form") return wrapper def _register_hook(self, cr, ids=None): - model = 'res.partner' - model_obj = self.pool.get(model) - if not hasattr(model_obj, 'check_quick_create'): - model_obj.name_create = self._wrap_name_create(model_obj.name_create, model) - model_obj.check_quick_create = True + if ids is None: + ids = self.search(cr, SUPERUSER_ID, []) + for model in self.browse(cr, SUPERUSER_ID, ids): + if model.avoid_quick_create: + model_name = model.model + model_obj = self.pool.get(model_name) + if not hasattr(model_obj, 'check_quick_create'): + model_obj.name_create = self._wrap_name_create(model_obj.name_create, model_name) + model_obj.check_quick_create = True return True - def name_create(self, cr, uid, name, context=None): - res = super(ir_model, self).name_create(cr, uid, name, context=context) - self._register_hook(cr, [res]) - return res + def create(self, cr, uid, vals, context=None): + res_id = super(ir_model, self).create(cr, uid, vals, context=context) + self._register_hook(cr, [res_id]) + return res_id + + def write(self, cr, uid, ids, vals, context=None): + if isinstance(ids, (int, long)): + ids = [ids] + super(ir_model, self).write(cr, uid, ids, vals, context=context) + self._register_hook(cr, ids) + return True diff --git a/base_optional_quick_create/model_view.xml b/base_optional_quick_create/model_view.xml new file mode 100644 index 000000000..e1d11126b --- /dev/null +++ b/base_optional_quick_create/model_view.xml @@ -0,0 +1,14 @@ + + + + + ir.model + + + + + + + + + From 030b2a5c913f39895e282114ba209c3e859eba52 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Wed, 12 Jun 2013 19:05:17 +0200 Subject: [PATCH 3/5] [imp] descr --- base_optional_quick_create/__openerp__.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/base_optional_quick_create/__openerp__.py b/base_optional_quick_create/__openerp__.py index d4ee51218..568dc1746 100644 --- a/base_optional_quick_create/__openerp__.py +++ b/base_optional_quick_create/__openerp__.py @@ -23,8 +23,10 @@ 'version': '0.1', 'category': 'Tools', 'description': """ -https://twitter.com/nbessi/status/337869826028605441 +This module allows to avoid to 'quick create' new records, through many2one fields, for a specific model. +You can configure which models should allow 'quick create'. When specified, 'quick create' option will always open the standard create form. +Got the idea from https://twitter.com/nbessi/status/337869826028605441 """, 'author': 'Agile Business Group', 'website': 'http://www.agilebg.com', From 7ed95427de28e0cc1843a0a7751e5d01a102be6b Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Wed, 12 Jun 2013 19:08:49 +0200 Subject: [PATCH 4/5] [fix] descr --- base_optional_quick_create/__openerp__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/base_optional_quick_create/__openerp__.py b/base_optional_quick_create/__openerp__.py index 568dc1746..2b2a3f8ad 100644 --- a/base_optional_quick_create/__openerp__.py +++ b/base_optional_quick_create/__openerp__.py @@ -24,7 +24,7 @@ 'category': 'Tools', 'description': """ This module allows to avoid to 'quick create' new records, through many2one fields, for a specific model. -You can configure which models should allow 'quick create'. When specified, 'quick create' option will always open the standard create form. +You can configure which models should allow 'quick create'. When specified, the 'quick create' option will always open the standard create form. Got the idea from https://twitter.com/nbessi/status/337869826028605441 """, From f3278ff07218ec16498b10406611d33c35a8a5a3 Mon Sep 17 00:00:00 2001 From: Lorenzo Battistini Date: Thu, 20 Jun 2013 11:48:11 +0200 Subject: [PATCH 5/5] [imp] exception --- base_optional_quick_create/model.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/base_optional_quick_create/model.py b/base_optional_quick_create/model.py index ad7b2142c..fc15593a7 100644 --- a/base_optional_quick_create/model.py +++ b/base_optional_quick_create/model.py @@ -20,6 +20,7 @@ from openerp.osv import orm, fields from openerp import SUPERUSER_ID +from openerp.tools.translate import _ class ir_model(orm.Model): @@ -31,7 +32,7 @@ class ir_model(orm.Model): def _wrap_name_create(self, old_create, model): def wrapper(cr, uid, name, context=None): - raise Exception("Can't create quickly. Opening create form") + raise orm.except_orm(_('Error'), _("Can't create quickly. Opening create form")) return wrapper def _register_hook(self, cr, ids=None):