Initial commit: add compliance_checks table, per-check metadata on assets, and compliance audit trail
This commit is contained in:
53
app/models/document_template.py
Normal file
53
app/models/document_template.py
Normal file
@@ -0,0 +1,53 @@
|
||||
import json
|
||||
from datetime import datetime
|
||||
from app.extensions import db
|
||||
|
||||
|
||||
class DocumentTemplate(db.Model):
|
||||
"""
|
||||
Uploaded Word (.docx) templates with Jinja2-style placeholders.
|
||||
|
||||
Template authors write {{ variable_name }} in their .docx file.
|
||||
When a document is generated the placeholders are replaced with actual
|
||||
context values (user, asset, assignment data).
|
||||
|
||||
PII variables (those prefixed user_name, user_email, user_phone) are
|
||||
re-rendered with masked values when a user's record is masked.
|
||||
"""
|
||||
__tablename__ = 'document_templates'
|
||||
|
||||
id = db.Column(db.Integer, primary_key=True)
|
||||
name = db.Column(db.String(200), nullable=False)
|
||||
description = db.Column(db.Text, nullable=True)
|
||||
|
||||
# Category maps to Paperwork.document_type so the UI can pre-filter
|
||||
category = db.Column(db.String(30), nullable=True) # handover|assignment|return|offboarding|custom
|
||||
|
||||
# Stored filename relative to TEMPLATE_FOLDER
|
||||
filename = db.Column(db.String(300), nullable=False)
|
||||
|
||||
# JSON list of placeholder names detected at upload time, e.g. ["user_name","asset_serial"]
|
||||
variables_json = db.Column(db.Text, nullable=True)
|
||||
|
||||
created_by_id = db.Column(db.Integer, db.ForeignKey('admin_users.id'), nullable=True)
|
||||
created_at = db.Column(db.DateTime, default=datetime.utcnow)
|
||||
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
|
||||
|
||||
created_by = db.relationship('AdminUser', foreign_keys=[created_by_id])
|
||||
paperwork_docs = db.relationship('Paperwork', back_populates='template', lazy='dynamic')
|
||||
|
||||
@property
|
||||
def variables(self):
|
||||
if self.variables_json:
|
||||
try:
|
||||
return json.loads(self.variables_json)
|
||||
except (json.JSONDecodeError, TypeError):
|
||||
return []
|
||||
return []
|
||||
|
||||
@variables.setter
|
||||
def variables(self, val):
|
||||
self.variables_json = json.dumps(val)
|
||||
|
||||
def __repr__(self):
|
||||
return f'<DocumentTemplate id={self.id} name={self.name!r}>'
|
||||
Reference in New Issue
Block a user