mirror of
https://github.com/bringout/oca-ocb-pos.git
synced 2026-04-21 23:02:10 +02:00
64 lines
2.5 KiB
Python
64 lines
2.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import models
|
|
from itertools import groupby
|
|
from odoo.osv.expression import AND
|
|
|
|
class PosSession(models.Model):
|
|
_inherit = 'pos.session'
|
|
|
|
def _pos_ui_models_to_load(self):
|
|
result = super()._pos_ui_models_to_load()
|
|
if self.config_id.module_pos_restaurant:
|
|
result.append('restaurant.printer')
|
|
if self.config_id.is_table_management:
|
|
result.append('restaurant.floor')
|
|
return result
|
|
|
|
def _loader_params_restaurant_floor(self):
|
|
return {
|
|
'search_params': {
|
|
'domain': [('pos_config_id', '=', self.config_id.id)],
|
|
'fields': ['name', 'background_color', 'table_ids', 'sequence'],
|
|
'order': 'sequence',
|
|
},
|
|
}
|
|
|
|
def _loader_params_restaurant_table(self):
|
|
return {
|
|
'search_params': {
|
|
'domain': [('active', '=', True)],
|
|
'fields': [
|
|
'name', 'width', 'height', 'position_h', 'position_v',
|
|
'shape', 'floor_id', 'color', 'seats', 'active'
|
|
],
|
|
},
|
|
}
|
|
|
|
def _get_pos_ui_restaurant_floor(self, params):
|
|
floors = self.env['restaurant.floor'].search_read(**params['search_params'])
|
|
floor_ids = [floor['id'] for floor in floors]
|
|
|
|
table_params = self._loader_params_restaurant_table()
|
|
table_params['search_params']['domain'] = AND([table_params['search_params']['domain'], [('floor_id', 'in', floor_ids)]])
|
|
tables = self.env['restaurant.table'].search(table_params['search_params']['domain'], order='floor_id')
|
|
tables_by_floor_id = {}
|
|
for floor_id, table_group in groupby(tables, key=lambda table: table.floor_id):
|
|
floor_tables = self.env['restaurant.table'].concat(*table_group)
|
|
tables_by_floor_id[floor_id.id] = floor_tables.read(table_params['search_params']['fields'])
|
|
|
|
for floor in floors:
|
|
floor['tables'] = tables_by_floor_id.get(floor['id'], [])
|
|
|
|
return floors
|
|
|
|
def _loader_params_restaurant_printer(self):
|
|
return {
|
|
'search_params': {
|
|
'domain': [('id', 'in', self.config_id.printer_ids.ids)],
|
|
'fields': ['name', 'proxy_ip', 'product_categories_ids', 'printer_type'],
|
|
},
|
|
}
|
|
def _get_pos_ui_restaurant_printer(self, params):
|
|
return self.env['restaurant.printer'].search_read(**params['search_params'])
|