Files

60 lines
2.3 KiB
Python

from app.extensions import db
from datetime import datetime
import hashlib, secrets
def _generate_uid(company_name):
raw = f"{company_name}-{secrets.token_hex(6)}"
return hashlib.sha256(raw.encode()).hexdigest()[:12]
class License(db.Model):
__tablename__ = 'licenses'
id = db.Column(db.Integer, primary_key=True)
company_id = db.Column(db.Integer, db.ForeignKey('companies.id'), nullable=False)
uid = db.Column(db.String(64), unique=True, nullable=False)
max_mitarbeiter = db.Column(db.Integer, default=5)
max_module_slots = db.Column(db.Integer, default=5)
unlimited_users = db.Column(db.Boolean, default=False)
unlimited_modules = db.Column(db.Boolean, default=False)
aktiv = db.Column(db.Boolean, default=True)
erstellt_am = db.Column(db.DateTime, default=datetime.utcnow)
modules = db.relationship('LicenseModule', backref='license', lazy='dynamic', cascade='all, delete-orphan')
@property
def used_users(self):
from app.models.user import User
return User.query.filter_by(company_id=self.company_id).count()
@property
def used_module_slots(self):
from app.models.user_module import UserModulePermission
from app.models.user import User
return db.session.query(UserModulePermission.id).join(User, UserModulePermission.user_id==User.id)\
.filter(User.company_id==self.company_id, UserModulePermission.aktiv==True).count()
def user_slots_display(self):
if self.unlimited_users: return '\u221e'
return f'{self.used_users} / {self.max_mitarbeiter}'
def module_slots_display(self):
if self.unlimited_modules: return '\u221e'
return f'{self.used_module_slots} / {self.max_module_slots}'
@staticmethod
def generate_uid(company_name):
return _generate_uid(company_name)
def __repr__(self):
return f'<License {self.uid}>'
class LicenseModule(db.Model):
__tablename__ = 'license_modules'
id = db.Column(db.Integer, primary_key=True)
license_id = db.Column(db.Integer, db.ForeignKey('licenses.id'), nullable=False)
module_id = db.Column(db.Integer, db.ForeignKey('modules.id'), nullable=False)
aktiv = db.Column(db.Boolean, default=True)
module = db.relationship('Module', backref='license_assignments')