[FIX] webclient returns to database manager after 1st database creation
[odoo/odoo.git] / addons / point_of_sale / wizard / pos_session_opening.py
1 #!/usr/bin/env python
2
3 from openerp import netsvc
4 from openerp.osv import osv, fields
5 from openerp.tools.translate import _
6
7 from openerp.addons.point_of_sale.point_of_sale import pos_session
8
9
10 class pos_session_opening(osv.osv_memory):
11     _name = 'pos.session.opening'
12
13     _columns = {
14         'pos_config_id' : fields.many2one('pos.config', 'Point of Sale', required=True),
15         'pos_session_id' : fields.many2one('pos.session', 'PoS Session'),
16         'pos_state' : fields.related('pos_session_id', 'state',
17                                      type='selection',
18                                      selection=pos_session.POS_SESSION_STATE,
19                                      string='Session Status', readonly=True),
20         'pos_state_str' : fields.char('Status', 32, readonly=True),
21         'show_config' : fields.boolean('Show Config', readonly=True),
22         'pos_session_name' : fields.related('pos_session_id', 'name',
23                                             type='char', size=64, readonly=True),
24         'pos_session_username' : fields.related('pos_session_id', 'user_id', 'name',
25                                                 type='char', size=64, readonly=True)
26     }
27
28     def open_ui(self, cr, uid, ids, context=None):
29         context = context or {}
30         data = self.browse(cr, uid, ids[0], context=context)
31         context['active_id'] = data.pos_session_id.id
32         return {
33             'type' : 'ir.actions.client',
34             'name' : _('Start Point Of Sale'),
35             'tag' : 'pos.ui',
36             'context' : context
37         }
38
39     def open_existing_session_cb_close(self, cr, uid, ids, context=None):
40         wf_service = netsvc.LocalService("workflow")
41         wizard = self.browse(cr, uid, ids[0], context=context)
42         wf_service.trg_validate(uid, 'pos.session', wizard.pos_session_id.id, 'cashbox_control', cr)
43         return self.open_session_cb(cr, uid, ids, context)
44
45     def open_session_cb(self, cr, uid, ids, context=None):
46         assert len(ids) == 1, "you can open only one session at a time"
47         proxy = self.pool.get('pos.session')
48         wizard = self.browse(cr, uid, ids[0], context=context)
49         if not wizard.pos_session_id:
50             values = {
51                 'user_id' : uid,
52                 'config_id' : wizard.pos_config_id.id,
53             }
54             session_id = proxy.create(cr, uid, values, context=context)
55             s = proxy.browse(cr, uid, session_id, context=context)
56             if s.state=='opened':
57                 return self.open_ui(cr, uid, ids, context=context)
58             return self._open_session(session_id)
59         return self._open_session(wizard.pos_session_id.id)
60
61     def open_existing_session_cb(self, cr, uid, ids, context=None):
62         assert len(ids) == 1
63         wizard = self.browse(cr, uid, ids[0], context=context)
64         return self._open_session(wizard.pos_session_id.id)
65
66     def _open_session(self, session_id):
67         return {
68             'name': _('Session'),
69             'view_type': 'form',
70             'view_mode': 'form,tree',
71             'res_model': 'pos.session',
72             'res_id': session_id,
73             'view_id': False,
74             'type': 'ir.actions.act_window',
75         }
76
77     def on_change_config(self, cr, uid, ids, config_id, context=None):
78         result = {
79             'pos_session_id': False,
80             'pos_state': False,
81             'pos_state_str' : '',
82             'pos_session_username' : False,
83             'pos_session_name' : False,
84         }
85         if not config_id:
86             return {'value' : result}
87         proxy = self.pool.get('pos.session')
88         session_ids = proxy.search(cr, uid, [
89             ('state', '!=', 'closed'),
90             ('config_id', '=', config_id),
91         ], context=context)
92         if session_ids:
93             session = proxy.browse(cr, uid, session_ids[0], context=context)
94             result['pos_state'] = str(session.state)
95             result['pos_state_str'] = dict(pos_session.POS_SESSION_STATE).get(session.state, '')
96             result['pos_session_id'] = session.id
97             result['pos_session_name'] = session.name
98             result['pos_session_username'] = session.user_id.name
99
100         return {'value' : result}
101
102     def default_get(self, cr, uid, fieldnames, context=None):
103         so = self.pool.get('pos.session')
104         session_ids = so.search(cr, uid, [('state','<>','closed'), ('user_id','=',uid)], context=context)
105         if session_ids:
106             result = so.browse(cr, uid, session_ids[0], context=context).config_id.id
107         else:
108             current_user = self.pool.get('res.users').browse(cr, uid, uid, context=context)
109             result = current_user.pos_config and current_user.pos_config.id or False
110         if not result:
111             r = self.pool.get('pos.config').search(cr, uid, [], context=context)
112             result = r and r[0] or False
113
114         count = self.pool.get('pos.config').search_count(cr, uid, [('state', '=', 'active')], context=context)
115         show_config = bool(count > 1)
116         return {
117             'pos_config_id' : result,
118             'show_config' : show_config,
119         }
120 pos_session_opening()