Jun 27 MT-7
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
"""
|
||||
app/models/tenant_settings.py
|
||||
------------------------------
|
||||
Per-tenant branding / self-service settings (MT-7).
|
||||
|
||||
One row per tenant DB. Created on first save; reads fall back to defaults
|
||||
when no row exists so tenant-zero needs zero data migration.
|
||||
"""
|
||||
|
||||
from app import db
|
||||
from app.utils.time_utils import now_eastern
|
||||
|
||||
|
||||
class TenantSettings(db.Model):
|
||||
__tablename__ = 'tenant_settings'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
company_name = db.Column(db.String(150), nullable=True)
|
||||
logo_url = db.Column(db.String(500), nullable=True)
|
||||
primary_color = db.Column(db.String(7), nullable=False, default='#1a56db')
|
||||
accent_color = db.Column(db.String(7), nullable=False, default='#16a34a')
|
||||
support_email = db.Column(db.String(255), nullable=True)
|
||||
updated_at = db.Column(db.DateTime, nullable=False, default=now_eastern)
|
||||
updated_by = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='SET NULL'),
|
||||
nullable=True)
|
||||
|
||||
# ── Defaults ──────────────────────────────────────────────────────────────
|
||||
DEFAULTS = {
|
||||
'company_name': 'Janitorial QC',
|
||||
'logo_url': None,
|
||||
'primary_color': '#1a56db',
|
||||
'accent_color': '#16a34a',
|
||||
'support_email': None,
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def get_or_default(cls):
|
||||
"""Return the settings row, or a default-filled instance (not persisted)."""
|
||||
row = cls.query.first()
|
||||
if row is not None:
|
||||
return row
|
||||
# Return a transient default so templates always get a real object.
|
||||
obj = cls()
|
||||
for k, v in cls.DEFAULTS.items():
|
||||
setattr(obj, k, v)
|
||||
return obj
|
||||
|
||||
@property
|
||||
def display_name(self):
|
||||
return self.company_name or self.DEFAULTS['company_name']
|
||||
|
||||
def __repr__(self):
|
||||
return f'<TenantSettings company={self.company_name}>'
|
||||
Reference in New Issue
Block a user