from odoo import models, fields, api import logging _logger = logging.getLogger(__name__) _logger.info("βœ… ows_models.py geladen") class OwsMachineArea(models.Model): _name = 'ows.machine.area' _table = "ows_machine_area" _description = 'OWS: Maschinenbereich' _order = 'name' name = fields.Char(required=True, translate=True) #color = fields.Integer(string="Farbe") color_hex = fields.Char(string="Farbe (Hex)", help="Hex-Farbcode wie #FF0000 fΓΌr Rot") class OwsMachine(models.Model): _name = 'ows.machine' _table = 'ows_machine' _description = 'OWS: Maschine' name = fields.Char(required=True, translate=True) code = fields.Char(required=True, help="Eindeutiger Kurzcode, z.B. 'lasercutter'") description = fields.Text() active = fields.Boolean(default=True) area_id = fields.Many2one('ows.machine.area', string='Bereich') _sql_constraints = [ ('code_unique', 'unique(code)', 'Maschinencode muss eindeutig sein.') ] def name_get(self): return [(rec.id, f"{rec.name} ({rec.code})") for rec in self] @api.model def get_access_list_grouped(self, partner_id): areas = self.env['ows.machine.area'].search([], order="name") _logger.info("πŸ” Maschinenbereiche: %s", areas.mapped('name')) _logger.info("πŸ” Partner_id: %s", partner_id) res = [] for area in areas: machines = self.search([('area_id', '=', area.id)], order="name") machine_list = [] for machine in machines: has_access = bool(self.env['ows.machine.access'].search([ ('partner_id', '=', partner_id), ('machine_id', '=', machine.id), ], limit=1)) machine_list.append({ 'name': machine.name, 'has_access': has_access, }) res.append({ 'area': area.name, 'color_hex': area.color_hex or '#000000', 'machines': machine_list }) return res class OwsMachineAccess(models.Model): _name = 'ows.machine.access' _table = 'ows_machine_access' _description = 'OWS: Maschinenfreigabe' _order = 'partner_id, machine_id' partner_id = fields.Many2one('res.partner', required=True, ondelete='cascade') machine_id = fields.Many2one('ows.machine', required=True) date_granted = fields.Date(default=fields.Date.today) date_expiry = fields.Date(string="Ablaufdatum") granted_by_pos = fields.Boolean(default=True) _sql_constraints = [ ('partner_machine_unique', 'unique(partner_id, machine_id)', 'Der Kunde hat diese Freigabe bereits.') ] class OwsMachineProduct(models.Model): _name = 'ows.machine.product' _table = 'ows_machine_product' _description = 'OWS: Zurordnung Produkt der Einweisung zur die Maschine' product_id = fields.Many2one('product.product', required=True, domain=[('available_in_pos', '=', True)], ondelete='cascade') machine_id = fields.Many2one('ows.machine', required=True, ondelete='cascade') class ResPartner(models.Model): _inherit = 'res.partner' machine_access_ids = fields.One2many( 'ows.machine.access', 'partner_id', string='Maschinenfreigaben' )