-
-
Notifications
You must be signed in to change notification settings - Fork 583
/
pos_multi_session_restaurant_models.py
32 lines (28 loc) · 1.64 KB
/
pos_multi_session_restaurant_models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# -*- coding: utf-8 -*-
from openerp import api, models, fields, SUPERUSER_ID
class pos_config(models.Model):
_inherit = 'pos.config'
def _check_same_floors(self, cr, uid, ids, context=None):
# Проверяем чтобы у всех ПОС у которых одинаковые мультисесии был одинаковый набор этажей (floors).
# Ранее было решено добавить такое ограничение.
# TODO
# У тебя здесь N*(N-1) операций.
# Можно проще делать:
# Сделать search в pos.config с аттрибутом groupby='multi_session_id'
# Потом в каждой группе взять один элемент и сравнить его с каждым. Если хоть одна разница есть, то return False.
# Тогда будет N + N операций
for rec in self.browse(cr, uid, ids, context=context):
pos_config_ids = self.pool['pos.config'].search(cr, uid, [
('multi_session_id', '=', rec.multi_session_id.id),
('id', '!=', rec.id)
])
for pos_config_obj in [r for r in self.browse(cr, uid, pos_config_ids, context=context)]:
a = set(pos_config_obj.floor_ids.ids)
b = set(rec.floor_ids.ids)
diff = a.difference(b)
if diff:
return False
return True
_constraints = [
(_check_same_floors, "Points of sale with same multi session must have same floors", ['multi_session_id', 'floor_ids']),
]