~openerp-commiter/openobject-addons/trunk-extra-addons

« back to all changes in this revision

Viewing changes to portal/portal.py

bugfix in overlay creation system

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- encoding: utf-8 -*-
1
2
##############################################################################
2
3
#
3
4
# Copyright (c) 2004-2006 TINY SPRL. (http://tiny.be) All Rights Reserved.
26
27
##############################################################################
27
28
 
28
29
from osv import fields, osv
29
 
 
 
30
import pooler
30
31
 
31
32
class portal_portal(osv.osv):
32
 
        _name = "portal.portal"
33
 
        _description = "Portal"
34
 
        _columns = {
35
 
                'name': fields.char('Portal Name',size=64,required=True),
36
 
                'group_id': fields.many2one('res.groups', 'Associated Group',required=True),
37
 
                'menu_id': fields.many2one('ir.ui.menu','Main Menu', required=True),
38
 
                'menu_action_id': fields.many2one('ir.actions.act_window', 'User Menu Action', readonly=True,
39
 
                                                                                  help='''Default main menu for the users of the portal. This field is auto-completed at creation. '''),
40
 
                'home_action_id': fields.many2one('ir.actions.act_window', 'User Home Action', help='Complete this field to provide a Home menu different from the Main menu.'),
41
 
                'company_id': fields.many2one('res.company', 'Company', required=True),
42
 
                }
43
 
 
44
 
        def create_action_menu(self,cr,uid,action_id,action_name,context):
45
 
                """
46
 
                Create default menu for the users of the portal.
47
 
                """
48
 
                menu_action_id = self.pool.get('ir.actions.act_window').create(cr,uid, { 
49
 
                        'name': action_name+ ' main menu',
50
 
                        'usage': 'menu',
51
 
                        'type':'ir.actions.act_window',
52
 
                        'res_model': "ir.ui.menu",
53
 
                        'domain': "[('parent_id','=',"+str(action_id)+")]",
54
 
                        'view_type': 'tree',
55
 
                        'view_id': self.pool.get('ir.model.data')._get_id(cr, uid, 'base', 'view_menu')
56
 
                        })
57
 
                return menu_action_id
58
 
 
59
 
        
60
 
        def create(self, cr, user, vals, context={}):
61
 
                if not vals.get('menu_action_id') :
62
 
                        vals['menu_action_id']= self.create_action_menu(cr,user,vals['menu_id'], vals['name'],context)
63
 
                return super(portal_portal, self).create(cr, user, vals, context)
64
 
 
65
 
        def create_menu(self, cr, uid,portal_id, portal_model_id, menu_name, action_id,parent_menu_id=None,view_ids=None,view_type=False,context=None):
66
 
                """
67
 
                Create a menuitem for the given portal and model whith the given name and action.
68
 
                """
69
 
                
70
 
                assert portal_id and portal_model_id and menu_name and action_id, "Create_menu does not accept null values"
71
 
                
72
 
                v=[]
73
 
                if view_type:
74
 
                        v.append('form')
75
 
                        v.append('tree')
76
 
                else:
77
 
                        v.append('tree')
78
 
                        v.append('form')
79
 
 
80
 
                portal= self.pool.get('portal.portal').browse(cr,uid,portal_id)
81
 
                model= self.pool.get('portal.model').browse(cr,uid,portal_model_id)
82
 
                action= self.pool.get('ir.actions.act_window').browse(cr,uid,action_id)
83
 
                ## Create the menu:
84
 
                menu_id=self.pool.get('ir.ui.menu').create(cr, uid, {
85
 
                        'name': menu_name,
86
 
                        'parent_id': parent_menu_id or portal.menu_id.id,
87
 
                        'icon': 'STOCK_NEW'
88
 
                        })
89
 
 
90
 
                available_view={}
91
 
                for view in model.view_ids:
92
 
                        available_view[view.type]= view.id
93
 
                vids = []
94
 
                i = 0
95
 
                ## Fetch the views:
96
 
                for view in self.pool.get('ir.actions.act_window').browse(cr,uid,action_id).views:
97
 
                        vids.append((0,0, {
98
 
                                'sequence':i,
99
 
                                'view_id': available_view.get(view[1], view[0]),
100
 
                                'view_mode': view[1],
101
 
                        }))
102
 
                        i+=1
103
 
 
104
 
                (unused1, unused2, cur_first_view) = vids[0]
105
 
 
106
 
                if view_ids['form'] != False:
107
 
                        if view_ids['tree'] != False:
108
 
                                vids[0]=(0,0, {
109
 
                                'sequence':0,
110
 
                                'view_id': view_ids[v[0]],
111
 
                                'view_mode': v[0],
112
 
                                })
113
 
                                vids[1]=(0,0, {
114
 
                                'sequence':1,
115
 
                                'view_id': view_ids[v[1]],
116
 
                                'view_mode': v[1],
117
 
                                })
118
 
                        else:
119
 
                                if view_type & (cur_first_view['view_mode']=='tree'):
120
 
                                        temp=vids[0]
121
 
                                        vids[0]=vids[1]
122
 
                                        vids[1]=temp
123
 
                                if v[0] =='form':
124
 
                                        vids[0]=(0,0, {
125
 
                                        'sequence':0,
126
 
                                        'view_id': view_ids['form'],
127
 
                                        'view_mode': 'form',
128
 
                                        })
129
 
                                else:
130
 
                                        vids[1]=(0,0, {
131
 
                                        'sequence':1,
132
 
                                        'view_id': view_ids['form'],
133
 
                                        'view_mode': 'form',
134
 
                                        })
135
 
                else:
136
 
                        if view_ids['tree'] != False:
137
 
                                if view_type & (cur_first_view['view_mode']=='tree'):
138
 
                                        temp=vids[0]
139
 
                                        vids[0]=vids[1]
140
 
                                        vids[1]=temp
141
 
                                if v[0] =='tree':
142
 
                                        vids[0]=(0,0, {
143
 
                                        'sequence':0,
144
 
                                        'view_id': view_ids['tree'],
145
 
                                        'view_mode': 'tree',
146
 
                                        })
147
 
                                else:
148
 
                                        vids[1]=(0,0, {
149
 
                                        'sequence':1,
150
 
                                        'view_id': view_ids['tree'],
151
 
                                        'view_mode': 'tree',
152
 
                                        })
153
 
                        else:
154
 
                                if view_type & (cur_first_view['view_mode']=='tree'):
155
 
                                        temp=vids[0]
156
 
                                        vids[0]=vids[1]
157
 
                                        vids[1]=temp
158
 
 
159
 
                ## Duplicate the action and give the fetched views to the new one:
160
 
                action_id = action.copy(cr,uid, action.id,{
161
 
                        'name': menu_name,
162
 
                        'view_ids': vids,
163
 
                        'view_type': v[0]
164
 
                        })
165
 
 
166
 
                ## Create the values:
167
 
                value_id = self.pool.get('ir.values').create(cr, uid, {
168
 
                        'name': 'AutoGenerated by portal module',
169
 
                        'key2': 'tree_but_open',
170
 
                        'model': 'ir.ui.menu',
171
 
                        'res_id': menu_id,
172
 
                        'value': 'ir.actions.act_window,%d'%action_id,
173
 
                        'object': True
174
 
                        })
175
 
                ## add the rule_group to the user
176
 
                if model.rule_group_id:
177
 
                        portal.group_id.write(cr,uid,[portal.group_id.id],{'rule_groups': [(4,model.rule_group_id.id)]})
178
 
                return action_id
179
 
        
 
33
    _name = "portal.portal"
 
34
    _description = "Portal"
 
35
    _columns = {
 
36
        'name': fields.char('Portal Name',size=64,required=True),
 
37
        'group_id': fields.many2one('res.groups', 'Associated Group',required=True),
 
38
        'menu_id': fields.many2one('ir.ui.menu','Main Menu', required=True),
 
39
        'menu_action_id': fields.many2one('ir.actions.act_window', 'User Menu Action', readonly=True,
 
40
            help='''Default main menu for the users of the portal. This field is auto-completed at creation. '''),
 
41
        'home_action_id': fields.many2one('ir.actions.act_window', 'User Home Action', help='Complete this field to provide a Home menu different from the Main menu.'),
 
42
        'company_id': fields.many2one('res.company', 'Company', required=True),
 
43
        }
 
44
 
 
45
    def create_action_menu(self,cr,uid,action_id,action_name,context):
 
46
        """
 
47
        Create default menu for the users of the portal.
 
48
        """
 
49
        menu_action_id = self.pool.get('ir.actions.act_window').create(cr,uid, { 
 
50
            'name': action_name+ ' main menu',
 
51
            'usage': 'menu',
 
52
            'type':'ir.actions.act_window',
 
53
            'res_model': "ir.ui.menu",
 
54
            'domain': "[('parent_id','=',"+str(action_id)+")]",
 
55
            'view_type': 'tree',
 
56
            'view_id': self.pool.get('ir.model.data')._get_id(cr, uid, 'base', 'view_menu')
 
57
            })
 
58
        return menu_action_id
 
59
 
 
60
    
 
61
    def create(self, cr, user, vals, context={}):
 
62
        if not vals.get('menu_action_id') :
 
63
            vals['menu_action_id']= self.create_action_menu(cr,user,vals['menu_id'], vals['name'],context)
 
64
        return super(portal_portal, self).create(cr, user, vals, context)
 
65
 
 
66
    def create_menu(self, cr, uid,portal_id, portal_model_id, menu_name, action_id,parent_menu_id=None,view_ids=None,view_type=False,context=None):        
 
67
        """
 
68
        Create a menuitem for the given portal and model whith the given name and action.
 
69
        """
 
70
        
 
71
        assert portal_id and portal_model_id and menu_name and action_id, "Create_menu does not accept null values"
 
72
        
 
73
        v=[]
 
74
        if view_type:
 
75
            v.append('form')
 
76
            v.append('tree')
 
77
        else:
 
78
            v.append('tree')
 
79
            v.append('form')
 
80
 
 
81
        portal= self.pool.get('portal.portal').browse(cr,uid,portal_id)
 
82
        model= self.pool.get('portal.model').browse(cr,uid,portal_model_id)
 
83
        action_obj= self.pool.get('ir.actions.act_window')
 
84
        action= action_obj.browse(cr,uid,action_id)
 
85
        ## Create the menu:
 
86
        menu_id=self.pool.get('ir.ui.menu').create(cr, uid, {
 
87
            'name': menu_name,
 
88
            'parent_id': parent_menu_id or portal.menu_id.id,
 
89
            'icon': 'STOCK_NEW'
 
90
            })
 
91
 
 
92
        available_view={}
 
93
        for view in model.view_ids:
 
94
            available_view[view.type]= view.id
 
95
        vids = []
 
96
        i = 0
 
97
        ## Fetch the views:
 
98
        for view in action_obj.browse(cr,uid,action_id,context=context).views:
 
99
            vids.append((0,0, {
 
100
                'sequence':i,
 
101
                'view_id': available_view.get(view[1], view[0]),
 
102
                'view_mode': view[1],
 
103
            }))
 
104
            i+=1
 
105
 
 
106
        (unused1, unused2, cur_first_view) = vids[0]
 
107
 
 
108
        if view_ids['form'] != False:
 
109
            if view_ids['tree'] != False:
 
110
                vids[0]=(0,0, {
 
111
                'sequence':0,
 
112
                'view_id': view_ids[v[0]],
 
113
                'view_mode': v[0],
 
114
                })
 
115
                vids[1]=(0,0, {
 
116
                'sequence':1,
 
117
                'view_id': view_ids[v[1]],
 
118
                'view_mode': v[1],
 
119
                })
 
120
            else:
 
121
                if view_type & (cur_first_view['view_mode']=='tree'):
 
122
                    temp=vids[0]
 
123
                    vids[0]=vids[1]
 
124
                    vids[1]=temp
 
125
                if v[0] =='form':
 
126
                    vids[0]=(0,0, {
 
127
                    'sequence':0,
 
128
                    'view_id': view_ids['form'],
 
129
                    'view_mode': 'form',
 
130
                    })
 
131
                else:
 
132
                    vids[1]=(0,0, {
 
133
                    'sequence':1,
 
134
                    'view_id': view_ids['form'],
 
135
                    'view_mode': 'form',
 
136
                    })
 
137
        else:
 
138
            if view_ids['tree'] != False:
 
139
                if view_type & (cur_first_view['view_mode']=='tree'):
 
140
                    temp=vids[0]
 
141
                    vids[0]=vids[1]
 
142
                    vids[1]=temp
 
143
                if v[0] =='tree':
 
144
                    vids[0]=(0,0, {
 
145
                    'sequence':0,
 
146
                    'view_id': view_ids['tree'],
 
147
                    'view_mode': 'tree',
 
148
                    })
 
149
                else:
 
150
                    vids[1]=(0,0, {
 
151
                    'sequence':1,
 
152
                    'view_id': view_ids['tree'],
 
153
                    'view_mode': 'tree',
 
154
                    })
 
155
            else:
 
156
                if view_type & (cur_first_view['view_mode']=='tree'):
 
157
                    temp=vids[0]
 
158
                    vids[0]=vids[1]
 
159
                    vids[1]=temp
 
160
 
 
161
        ## Duplicate the action and give the fetched views to the new one:
 
162
        action_id = action_obj.copy(cr,uid, action.id,{
 
163
            'name': menu_name,
 
164
            'view_ids': vids,
 
165
            'view_type': v[0]
 
166
            },context=context)
 
167
 
 
168
        ## Create the values:
 
169
        value_id = self.pool.get('ir.values').create(cr, uid, {
 
170
            'name': 'AutoGenerated by portal module',
 
171
            'key2': 'tree_but_open',
 
172
            'model': 'ir.ui.menu',
 
173
            'res_id': menu_id,
 
174
            'value': 'ir.actions.act_window,%d'%action_id,
 
175
            'object': True
 
176
            })
 
177
        ## add the rule_group to the user
 
178
        if model.rule_group_id:
 
179
            portal.group_id.write(cr,uid,[portal.group_id.id],{'rule_groups': [(4,model.rule_group_id.id)]})
 
180
        return action_id
 
181
    
180
182
portal_portal()
181
183
 
182
 
        
 
184
    
183
185
class portal_model(osv.osv):
184
 
        _name = "portal.model"
185
 
        _description = "Portal Model"
186
 
        _columns = {
187
 
                'name': fields.char('Name',size=64,),
188
 
                'model_id': fields.many2one('ir.model','Model',required=True),
189
 
                'view_ids': fields.many2many('ir.ui.view','portal_model_view_rel','model_id','view_id','Views'),
190
 
                'rule_group_id': fields.many2one('ir.rule.group','Rule group'),
191
 
                }
 
186
    _name = "portal.model"
 
187
    _description = "Portal Model"
 
188
    _columns = {
 
189
        'name': fields.char('Name',size=64,),
 
190
        'model_id': fields.many2one('ir.model','Model',required=True),
 
191
        'view_ids': fields.many2many('ir.ui.view','portal_model_view_rel','model_id','view_id','Views'),
 
192
        'rule_group_id': fields.many2one('ir.rule.group','Rule group'),
 
193
        }
192
194
portal_model()
193
195
 
194
196
class ir_actions_act_report_xml(osv.osv):
195
 
        _inherit="ir.actions.report.xml"
196
 
        _columns={
197
 
                "portal_visible": fields.boolean('Visible in Portal')
198
 
                }
199
 
        _defaults = {
200
 
                'portal_visible': lambda *a: True,
201
 
        }
 
197
    _inherit="ir.actions.report.xml"
 
198
    _columns={
 
199
        "portal_visible": fields.boolean('Visible in Portal')
 
200
        }
 
201
    _defaults = {
 
202
        'portal_visible': lambda *a: True,
 
203
    }
202
204
ir_actions_act_report_xml()
203
205
 
204
206
class ir_actions_act_report_custom(osv.osv):
205
 
        _inherit="ir.actions.report.custom"
206
 
        _columns={
207
 
                "portal_visible": fields.boolean('Visible in Portal')
208
 
                }
209
 
        _defaults = {
210
 
                'portal_visible': lambda *a: True,
211
 
        }
 
207
    _inherit="ir.actions.report.custom"
 
208
    _columns={
 
209
        "portal_visible": fields.boolean('Visible in Portal')
 
210
        }
 
211
    _defaults = {
 
212
        'portal_visible': lambda *a: True,
 
213
    }
212
214
ir_actions_act_report_custom()
213
215
 
214
216
class ir_actions_act_wizard(osv.osv):
215
 
        _inherit="ir.actions.wizard"
216
 
        _columns={
217
 
                "portal_visible": fields.boolean('Visible in Portal')
218
 
                }
219
 
        _defaults = {
220
 
                'portal_visible': lambda *a: True,
221
 
        }
 
217
    _inherit="ir.actions.wizard"
 
218
    _columns={
 
219
        "portal_visible": fields.boolean('Visible in Portal')
 
220
        }
 
221
    _defaults = {
 
222
        'portal_visible': lambda *a: True,
 
223
    }
222
224
ir_actions_act_wizard()
223
225
 
224
226
class ir_actions_act_window(osv.osv):
225
 
        _inherit="ir.actions.act_window"
226
 
        _columns={
227
 
                "portal_visible": fields.boolean('Visible in Portal')
228
 
                }
229
 
        _defaults = {
230
 
                'portal_visible': lambda *a: True,
231
 
        }
 
227
    _inherit="ir.actions.act_window"
 
228
    _columns={
 
229
        "portal_visible": fields.boolean('Visible in Portal')
 
230
        }
 
231
    _defaults = {
 
232
        'portal_visible': lambda *a: True,
 
233
    }
232
234
ir_actions_act_window()
 
235
 
 
236
class portal_config_install_modules_wizard(osv.osv_memory):
 
237
    _name='portal.config.install_modules_wizard'
 
238
    _columns = {
 
239
        'portal_sale':fields.boolean('Portal for Sale Module'),
 
240
        'portal_service':fields.boolean('Portal for Service Module'),
 
241
        'portal_account':fields.boolean('Portal for Account Module'),
 
242
        'portal_analytic':fields.boolean('Portal for Analytic Account Module'),        
 
243
    }
 
244
    def action_cancel(self,cr,uid,ids,conect=None):
 
245
        return {
 
246
                'view_type': 'form',
 
247
                "view_mode": 'form',
 
248
                'res_model': 'ir.module.module.configuration.wizard',
 
249
                'type': 'ir.actions.act_window',
 
250
                'target':'new',
 
251
         }
 
252
    def action_install(self, cr, uid, ids, context=None):
 
253
        result=self.read(cr,uid,ids)        
 
254
        mod_obj = self.pool.get('ir.module.module')
 
255
        for res in result:
 
256
            for r in res:
 
257
                if r<>'id' and res[r]:
 
258
                    ids = mod_obj.search(cr, uid, [('name', '=', r)])
 
259
                    mod_obj.action_install(cr, uid, ids, context=context)
 
260
        cr.commit()
 
261
        db, pool = pooler.restart_pool(cr.dbname,force_demo=True, update_module=True)
 
262
        return {
 
263
                'view_type': 'form',
 
264
                "view_mode": 'form',
 
265
                'res_model': 'ir.module.module.configuration.wizard',
 
266
                'type': 'ir.actions.act_window',
 
267
                'target':'new',
 
268
            }
 
269
portal_config_install_modules_wizard()
 
270
 
 
271
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:
 
272