"""Self-hosted employee directory. For sites with no external HR database. When employee_directory_mode is 'selfhosted', the employee lookup APIs read this app-owned table instead of the external directory, and the directory is managed in-app (CRUD + CSV import). to_dict emits the same keys the external contract returns (SSO, First_Name, Last_Name, Team, Role, Picture) so the frontend and both modes share one shape. photofilename holds the basename of an uploaded photo (photo-) served from instance/employeephotos/. It is distinct from the legacy Picture text field: in self-hosted mode the displayed photo comes from uploads (photofilename) via the shared resolver, not from Picture. """ from shopdb.api import db class DirectoryEmployee(db.Model): __tablename__ = 'directoryemployees' sso = db.Column(db.Integer, primary_key=True, autoincrement=False) firstname = db.Column(db.String(100), nullable=False) lastname = db.Column(db.String(100), nullable=False) team = db.Column(db.String(100)) role = db.Column(db.String(100)) picture = db.Column(db.String(255)) # basename of an uploaded photo (photo-); None when no upload photofilename = db.Column(db.String(255)) def to_dict(self): # Keys match the external employees contract the frontend consumes. # photofilename is extra (self-hosted upload); the resolved display URL # is added as photourl by the API layer via resolve_employee_photo_url. return { 'SSO': self.sso, 'First_Name': self.firstname, 'Last_Name': self.lastname, 'Team': self.team, 'Role': self.role, 'Picture': self.picture, 'photofilename': self.photofilename, }