oca-ocb-pos/odoo-bringout-oca-ocb-pos_restaurant/pos_restaurant/models/pos_session.py
2025-08-29 15:20:50 +02:00

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'])