926b367e40
- Added QUICK_START_PDF_EXPORT.md for user guidance on PDF export features. - Developed Web/pdf_audit_export.py for generating DIN 5008 compliant PDFs. - Enhanced Web/app.py with new routes for quick and official PDF exports. - Updated Web/templates/admin_audit.html to include new PDF export buttons. - Created verify_pdf_export_setup.py to verify installation and configuration of the PDF export system.
236 lines
6.5 KiB
Python
236 lines
6.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Invario PDF Audit Export - Implementation Verification Script
|
|
|
|
This script verifies that all components of the PDF audit export system
|
|
are correctly installed and configured.
|
|
"""
|
|
|
|
import sys
|
|
import os
|
|
|
|
def verify_files():
|
|
"""Verify all required files exist."""
|
|
print("=" * 60)
|
|
print("INVARIO PDF AUDIT EXPORT - INSTALLATION VERIFICATION")
|
|
print("=" * 60)
|
|
print()
|
|
|
|
files_to_check = {
|
|
"Core Module": [
|
|
"Web/pdf_audit_export.py",
|
|
],
|
|
"Flask Integration": [
|
|
"Web/app.py", # Should contain new routes
|
|
"Web/templates/admin_audit.html", # Should contain new buttons
|
|
],
|
|
"Documentation": [
|
|
"PDF_AUDIT_EXPORT_DOCUMENTATION.md",
|
|
"PDF_IMPLEMENTATION_GUIDE.md",
|
|
"QUICK_START_PDF_EXPORT.md",
|
|
]
|
|
}
|
|
|
|
base_path = os.path.dirname(os.path.abspath(__file__))
|
|
all_ok = True
|
|
|
|
for category, files in files_to_check.items():
|
|
print(f"\n[{category}]")
|
|
for filename in files:
|
|
filepath = os.path.join(base_path, filename)
|
|
exists = os.path.exists(filepath)
|
|
status = "✓" if exists else "✗"
|
|
print(f" {status} {filename}")
|
|
if not exists:
|
|
all_ok = False
|
|
|
|
return all_ok
|
|
|
|
def verify_dependencies():
|
|
"""Verify Python dependencies are installed."""
|
|
print("\n[Python Dependencies]")
|
|
|
|
dependencies = [
|
|
("reportlab", "PDF generation"),
|
|
("qrcode", "QR code generation"),
|
|
("pillow", "Image processing"),
|
|
("flask", "Web framework"),
|
|
("pymongo", "MongoDB driver"),
|
|
]
|
|
|
|
all_ok = True
|
|
for package, description in dependencies:
|
|
try:
|
|
__import__(package)
|
|
print(f" ✓ {package:15} - {description}")
|
|
except ImportError:
|
|
print(f" ✗ {package:15} - {description}")
|
|
all_ok = False
|
|
|
|
return all_ok
|
|
|
|
def verify_routes():
|
|
"""Verify new routes are defined in app.py."""
|
|
print("\n[Flask Routes]")
|
|
|
|
routes_to_check = [
|
|
"/admin/audit/export/pdf/quick",
|
|
"/admin/audit/export/pdf/official",
|
|
]
|
|
|
|
app_py_path = "Web/app.py"
|
|
if not os.path.exists(app_py_path):
|
|
print(" ✗ app.py not found")
|
|
return False
|
|
|
|
with open(app_py_path, 'r') as f:
|
|
app_content = f.read()
|
|
|
|
all_ok = True
|
|
for route in routes_to_check:
|
|
if route in app_content:
|
|
print(f" ✓ {route}")
|
|
else:
|
|
print(f" ✗ {route}")
|
|
all_ok = False
|
|
|
|
return all_ok
|
|
|
|
def verify_template():
|
|
"""Verify template updates are in place."""
|
|
print("\n[HTML Template Updates]")
|
|
|
|
template_path = "Web/templates/admin_audit.html"
|
|
if not os.path.exists(template_path):
|
|
print(" ✗ admin_audit.html not found")
|
|
return False
|
|
|
|
with open(template_path, 'r') as f:
|
|
template_content = f.read()
|
|
|
|
checks = {
|
|
"DIN 5008 Info Box": "DIN 5008",
|
|
"PDF Quick-Check Button": "admin_audit_export_pdf_quick",
|
|
"PDF Official Button": "admin_audit_export_pdf_official",
|
|
}
|
|
|
|
all_ok = True
|
|
for check_name, check_string in checks.items():
|
|
if check_string in template_content:
|
|
print(f" ✓ {check_name}")
|
|
else:
|
|
print(f" ✗ {check_name}")
|
|
all_ok = False
|
|
|
|
return all_ok
|
|
|
|
def get_statistics():
|
|
"""Get implementation statistics."""
|
|
print("\n[Implementation Statistics]")
|
|
|
|
stats = {
|
|
"Web/pdf_audit_export.py": "PDF Export Module",
|
|
"PDF_AUDIT_EXPORT_DOCUMENTATION.md": "Technical Documentation",
|
|
"PDF_IMPLEMENTATION_GUIDE.md": "Implementation Guide",
|
|
"QUICK_START_PDF_EXPORT.md": "Quick Start Guide",
|
|
}
|
|
|
|
total_lines = 0
|
|
for filename, description in stats.items():
|
|
if os.path.exists(filename):
|
|
with open(filename, 'r') as f:
|
|
lines = len(f.readlines())
|
|
print(f" {filename:45} {lines:5} lines - {description}")
|
|
total_lines += lines
|
|
|
|
print(f"\n Total documentation: {total_lines} lines")
|
|
|
|
def print_next_steps():
|
|
"""Print next steps for the user."""
|
|
print("\n" + "=" * 60)
|
|
print("NEXT STEPS")
|
|
print("=" * 60)
|
|
print("""
|
|
1. CONFIGURE SCHOOL INFO (Optional)
|
|
Edit config.json and add:
|
|
{
|
|
"school": {
|
|
"name": "Your School Name",
|
|
"address": "School Address",
|
|
"postal_code": "12345",
|
|
"city": "City Name",
|
|
"school_number": "123456",
|
|
"it_admin": "Admin Name"
|
|
}
|
|
}
|
|
|
|
2. RESTART THE SYSTEM
|
|
./start.sh
|
|
or: python Web/app.py
|
|
|
|
3. TEST PDF EXPORTS
|
|
- Login to http://localhost:8000/admin/audit
|
|
- Click "🚀 Schnell-Check" for compact PDF
|
|
- Click "📋 Amtlicher Bericht" for full DIN 5008 report
|
|
|
|
4. VERIFY COMPLIANCE
|
|
- Check PDF opens in your PDF reader
|
|
- Verify school info is correct
|
|
- Test signature fields
|
|
- Verify barrierefreiheit (accessibility)
|
|
|
|
5. DEPLOY TO PRODUCTION
|
|
- Update your deployment scripts
|
|
- Document new export procedures
|
|
- Train staff on Quick-Check vs Official Report
|
|
""")
|
|
|
|
def main():
|
|
"""Run all verifications."""
|
|
print()
|
|
|
|
checks = [
|
|
("File Structure", verify_files),
|
|
("Dependencies", verify_dependencies),
|
|
("Flask Routes", verify_routes),
|
|
("HTML Template", verify_template),
|
|
]
|
|
|
|
all_passed = True
|
|
for name, check_func in checks:
|
|
try:
|
|
passed = check_func()
|
|
if not passed:
|
|
all_passed = False
|
|
except Exception as e:
|
|
print(f"\n✗ Error during {name} check: {e}")
|
|
all_passed = False
|
|
|
|
# Get statistics
|
|
get_statistics()
|
|
|
|
# Print results
|
|
print("\n" + "=" * 60)
|
|
if all_passed:
|
|
print("✓ ALL VERIFICATION CHECKS PASSED!")
|
|
print("=" * 60)
|
|
print_next_steps()
|
|
else:
|
|
print("✗ SOME VERIFICATION CHECKS FAILED")
|
|
print("=" * 60)
|
|
print("\nPlease check the errors above and verify:")
|
|
print("1. All files are in the correct locations")
|
|
print("2. All dependencies are installed")
|
|
print("3. app.py and admin_audit.html have been updated")
|
|
sys.exit(1)
|
|
|
|
print("\n" + "=" * 60)
|
|
print("For detailed documentation, see:")
|
|
print(" - QUICK_START_PDF_EXPORT.md (Start here!)")
|
|
print(" - PDF_IMPLEMENTATION_GUIDE.md (Technical details)")
|
|
print(" - PDF_AUDIT_EXPORT_DOCUMENTATION.md (Requirements)")
|
|
print("=" * 60 + "\n")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|