175 lines
5.6 KiB
Python
175 lines
5.6 KiB
Python
"""
|
|
Offline-kompatible E-Mail-Benachrichtigung für MYP-System
|
|
========================================================
|
|
|
|
Da das System im Produktionsbetrieb offline läuft, werden alle E-Mail-Benachrichtigungen
|
|
nur geloggt aber nicht tatsächlich versendet.
|
|
"""
|
|
|
|
import logging
|
|
from datetime import datetime
|
|
from typing import Optional, Dict, Any
|
|
|
|
from utils.logging_config import get_logger
|
|
|
|
logger = get_logger("email_notification")
|
|
|
|
class OfflineEmailNotification:
|
|
"""
|
|
Offline-E-Mail-Benachrichtigung die nur Logs erstellt.
|
|
Simuliert E-Mail-Versand für Offline-Betrieb.
|
|
"""
|
|
|
|
def __init__(self):
|
|
self.enabled = False # Immer deaktiviert im Offline-Modus
|
|
logger.info("📧 Offline-E-Mail-Benachrichtigung initialisiert (kein echter E-Mail-Versand)")
|
|
|
|
def send_email(self, to: str, subject: str, body: str, **kwargs) -> bool:
|
|
"""
|
|
Simuliert E-Mail-Versand durch Logging.
|
|
|
|
Args:
|
|
to: E-Mail-Empfänger
|
|
subject: E-Mail-Betreff
|
|
body: E-Mail-Inhalt
|
|
**kwargs: Zusätzliche Parameter
|
|
|
|
Returns:
|
|
bool: Immer True (Simulation erfolgreich)
|
|
"""
|
|
logger.info(f"📧 [OFFLINE-SIMULATION] E-Mail würde versendet werden:")
|
|
logger.info(f" 📮 An: {to}")
|
|
logger.info(f" 📋 Betreff: {subject}")
|
|
logger.info(f" 📝 Inhalt: {body[:100]}{'...' if len(body) > 100 else ''}")
|
|
logger.info(f" 🕒 Zeitpunkt: {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}")
|
|
|
|
if kwargs:
|
|
logger.info(f" ⚙️ Zusätzliche Parameter: {kwargs}")
|
|
|
|
return True
|
|
|
|
def send_notification_email(self, recipient: str, notification_type: str,
|
|
data: Dict[str, Any]) -> bool:
|
|
"""
|
|
Sendet Benachrichtigungs-E-Mail (Offline-Simulation).
|
|
|
|
Args:
|
|
recipient: E-Mail-Empfänger
|
|
notification_type: Art der Benachrichtigung
|
|
data: Daten für die Benachrichtigung
|
|
|
|
Returns:
|
|
bool: Immer True (Simulation erfolgreich)
|
|
"""
|
|
subject = f"MYP-Benachrichtigung: {notification_type}"
|
|
body = f"Benachrichtigung vom MYP-System:\n\n{data}"
|
|
|
|
return self.send_email(recipient, subject, body, notification_type=notification_type)
|
|
|
|
def send_maintenance_notification(self, recipient: str, task_title: str,
|
|
task_description: str) -> bool:
|
|
"""
|
|
Sendet Wartungs-Benachrichtigung (Offline-Simulation).
|
|
|
|
Args:
|
|
recipient: E-Mail-Empfänger
|
|
task_title: Titel der Wartungsaufgabe
|
|
task_description: Beschreibung der Wartungsaufgabe
|
|
|
|
Returns:
|
|
bool: Immer True (Simulation erfolgreich)
|
|
"""
|
|
subject = f"MYP-Wartungsaufgabe: {task_title}"
|
|
body = f"""
|
|
Neue Wartungsaufgabe im MYP-System:
|
|
|
|
Titel: {task_title}
|
|
Beschreibung: {task_description}
|
|
Erstellt: {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}
|
|
|
|
Bitte loggen Sie sich in das MYP-System ein, um weitere Details zu sehen.
|
|
"""
|
|
|
|
return self.send_email(recipient, subject, body, task_type="maintenance")
|
|
|
|
# Globale Instanz für einfache Verwendung
|
|
email_notifier = OfflineEmailNotification()
|
|
|
|
def send_email_notification(recipient: str, subject: str, body: str, **kwargs) -> bool:
|
|
"""
|
|
Haupt-Funktion für E-Mail-Versand (Offline-kompatibel).
|
|
|
|
Args:
|
|
recipient: E-Mail-Empfänger
|
|
subject: E-Mail-Betreff
|
|
body: E-Mail-Inhalt
|
|
**kwargs: Zusätzliche Parameter
|
|
|
|
Returns:
|
|
bool: True wenn "erfolgreich" (geloggt)
|
|
"""
|
|
return email_notifier.send_email(recipient, subject, body, **kwargs)
|
|
|
|
def send_maintenance_email(recipient: str, task_title: str, task_description: str) -> bool:
|
|
"""
|
|
Sendet Wartungs-E-Mail (Offline-kompatibel).
|
|
|
|
Args:
|
|
recipient: E-Mail-Empfänger
|
|
task_title: Titel der Wartungsaufgabe
|
|
task_description: Beschreibung der Wartungsaufgabe
|
|
|
|
Returns:
|
|
bool: True wenn "erfolgreich" (geloggt)
|
|
"""
|
|
return email_notifier.send_maintenance_notification(recipient, task_title, task_description)
|
|
|
|
def send_guest_approval_email(recipient: str, otp_code: str, expires_at: str) -> bool:
|
|
"""
|
|
Sendet Gastauftrags-Genehmigung-E-Mail (Offline-kompatibel).
|
|
|
|
Args:
|
|
recipient: E-Mail-Empfänger
|
|
otp_code: OTP-Code für den Gastauftrag
|
|
expires_at: Ablaufzeit des OTP-Codes
|
|
|
|
Returns:
|
|
bool: True wenn "erfolgreich" (geloggt)
|
|
"""
|
|
subject = "MYP-Gastauftrag genehmigt"
|
|
body = f"""
|
|
Ihr Gastauftrag wurde genehmigt!
|
|
|
|
OTP-Code: {otp_code}
|
|
Gültig bis: {expires_at}
|
|
|
|
Bitte verwenden Sie diesen Code am MYP-Terminal, um Ihren Druckauftrag zu starten.
|
|
"""
|
|
|
|
return email_notifier.send_email(recipient, subject, body,
|
|
otp_code=otp_code, expires_at=expires_at)
|
|
|
|
def send_guest_rejection_email(recipient: str, reason: str) -> bool:
|
|
"""
|
|
Sendet Gastauftrags-Ablehnungs-E-Mail (Offline-kompatibel).
|
|
|
|
Args:
|
|
recipient: E-Mail-Empfänger
|
|
reason: Grund für die Ablehnung
|
|
|
|
Returns:
|
|
bool: True wenn "erfolgreich" (geloggt)
|
|
"""
|
|
subject = "MYP-Gastauftrag abgelehnt"
|
|
body = f"""
|
|
Ihr Gastauftrag wurde leider abgelehnt.
|
|
|
|
Grund: {reason}
|
|
|
|
Bei Fragen wenden Sie sich bitte an das MYP-Team.
|
|
"""
|
|
|
|
return email_notifier.send_email(recipient, subject, body, rejection_reason=reason)
|
|
|
|
# Für Backward-Kompatibilität
|
|
send_notification = send_email_notification |