[IMP] modify configurator for inheritability, move it to res_config, make res_config_...
[odoo/odoo.git] / bin / addons / base / res / res_config.py
1 # -*- coding: utf-8 -*-
2 ##############################################################################
3 #    
4 #    OpenERP, Open Source Management Solution
5 #    Copyright (C) 2004-2009 Tiny SPRL (<http://tiny.be>).
6 #
7 #    This program is free software: you can redistribute it and/or modify
8 #    it under the terms of the GNU Affero General Public License as
9 #    published by the Free Software Foundation, either version 3 of the
10 #    License, or (at your option) any later version.
11 #
12 #    This program is distributed in the hope that it will be useful,
13 #    but WITHOUT ANY WARRANTY; without even the implied warranty of
14 #    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 #    GNU Affero General Public License for more details.
16 #
17 #    You should have received a copy of the GNU Affero General Public License
18 #    along with this program.  If not, see <http://www.gnu.org/licenses/>.     
19 #
20 ##############################################################################
21
22 from osv import osv
23 import netsvc
24
25 class res_config_configurable(osv.osv_memory):
26     _name = 'res.configurable'
27     logger = netsvc.Logger()
28
29     def _next_action(self, cr, uid):
30         todos = self.pool.get('ir.actions.todo')
31         self.logger.notifyChannel('actions', netsvc.LOG_INFO,
32                                   'getting next %s' % todos)
33         active_todos = todos.search(cr, uid,
34                                 [('type','=','configure'),
35                                  ('state', '=', 'open'),
36                                  ('active','=',True)],
37                                 limit=1, context=None)
38         if active_todos:
39             return todos.browse(cr, uid, active_todos[0], context=None)
40         return None
41
42     def _next(self, cr, uid):
43         self.logger.notifyChannel('actions', netsvc.LOG_INFO,
44                                   'getting next operation')
45         next = self._next_action(cr, uid)
46         self.logger.notifyChannel('actions', netsvc.LOG_INFO,
47                                   'next action is %s' % next)
48         if next:
49             self.pool.get('ir.actions.todo').write(cr, uid, next.id, {
50                     'state':'done',
51                     }, context=None)
52             action = next.action_id
53             return {
54                 'view_mode': action.view_mode,
55                 'view_type': action.view_type,
56                 'view_id': action.view_id and [action.view_id.id] or False,
57                 'res_model': action.res_model,
58                 'type': action.type,
59                 'target': action.target,
60                 }
61         self.logger.notifyChannel(
62             'actions', netsvc.LOG_INFO,
63             'all configuration actions have been executed')
64         return {'type': 'ir.actions.act_window_close'}
65     def next(self, cr, uid, *args, **kwargs):
66         return self._next(cr, uid)
67 res_config_configurable()
68
69 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: