"""Dashboard default model: display-PC-IP -> display role (+ business unit). A single "display" PC image resolves what it should show from its own IP: the role (shopfloor dashboard, lobby slideshow, or 3D-parts kiosk) and, for the dashboard role, which business unit. Powers the visitor-location + display-role lookups the kiosks call at launch. """ from shopdb.extensions import db from .base import BaseModel # Display role -> the frontend kiosk path it maps to. Kept here so the API and # any consumer resolve a role to a URL the same way. DISPLAY_ROLE_PATHS = { 'dashboard': '/shopfloor', 'lobby': '/tv', 'partskiosk': '/parts-kiosk', } DISPLAY_ROLES = tuple(DISPLAY_ROLE_PATHS.keys()) class DashboardDefault(BaseModel): """Maps a display PC IP address to its display role (+ business unit).""" __tablename__ = 'dashboarddefaults' dashboarddefaultid = db.Column(db.Integer, primary_key=True) ipaddress = db.Column(db.String(50), unique=True, nullable=False) # Which display the IP drives. Only the dashboard role uses businessunitid. displayrole = db.Column(db.String(20), nullable=False, default='dashboard') businessunitid = db.Column( db.Integer, db.ForeignKey('businessunits.businessunitid'), nullable=True ) description = db.Column(db.String(255)) businessunit = db.relationship('BusinessUnit') @property def displaypath(self): return DISPLAY_ROLE_PATHS.get(self.displayrole) def __repr__(self): return f" {self.displayrole}>"