95 lines
3.3 KiB
Python
95 lines
3.3 KiB
Python
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'
|
|
)
|