from odoo import fields, models, api class PosKdsReportLine(models.Model): _name = 'pos.kds.report.line' _description = 'KDS Line Completion Report' _order = 'completion_datetime desc' pos_order_id = fields.Many2one('pos.order', string='Order', required=True, ondelete='cascade') pos_order_line_id = fields.Many2one('pos.order.line', string='Order Line', required=True, ondelete='cascade') product_id = fields.Many2one('product.product', string='Product', required=True) pos_category_id = fields.Many2one('pos.category', string='POS Category', compute='_compute_pos_category', store=True) pos_config_id = fields.Many2one('pos.config', string='POS Shop', compute='_compute_pos_config', store=True) prep_display_id = fields.Many2one('pos.prep.display', string='Preparation Display', required=True) preparation_time = fields.Integer('Preparation Time (s)', help="Seconds taken to prepare") service_time = fields.Integer('Service Time (s)', help="Seconds taken to serve") completion_time = fields.Integer('Completion Time (s)', help="Total seconds taken to complete (prep + service)") completion_datetime = fields.Datetime('Completion Date', default=fields.Datetime.now) @api.depends('product_id') def _compute_pos_category(self): for record in self: record.pos_category_id = record.product_id.pos_categ_ids[:1] if record.product_id.pos_categ_ids else False @api.depends('pos_order_id') def _compute_pos_config(self): for record in self: record.pos_config_id = record.pos_order_id.session_id.config_id def name_get(self): result = [] for record in self: name = f"{record.pos_order_id.name} - {record.product_id.name}" result.append((record.id, name)) return result class PosKdsReportOrder(models.Model): _name = 'pos.kds.report.order' _description = 'KDS Order Completion Report' _order = 'completion_datetime desc' pos_order_id = fields.Many2one('pos.order', string='Order', required=True, ondelete='cascade') pos_config_id = fields.Many2one('pos.config', string='POS Shop', compute='_compute_pos_config', store=True) prep_display_id = fields.Many2one('pos.prep.display', string='Preparation Display', required=True) completion_time = fields.Integer('Completion Time (s)', help="Max completion time across all lines of the order on this display") completion_datetime = fields.Datetime('Completion Date', default=fields.Datetime.now) @api.depends('pos_order_id') def _compute_pos_config(self): for record in self: record.pos_config_id = record.pos_order_id.session_id.config_id def name_get(self): result = [] for record in self: name = f"{record.pos_order_id.name} ({record.prep_display_id.name})" result.append((record.id, name)) return result