refactor: Remove unused email sending functionality and update invoice status descriptions
This commit is contained in:
+3
-55
@@ -12,11 +12,9 @@ import tempfile
|
||||
import threading
|
||||
import unicodedata
|
||||
import zipfile
|
||||
import smtplib
|
||||
from datetime import timedelta, datetime, date
|
||||
from functools import wraps
|
||||
from io import BytesIO
|
||||
from email.message import EmailMessage
|
||||
from urllib.parse import parse_qs, quote, urlparse
|
||||
from werkzeug.security import generate_password_hash, check_password_hash
|
||||
from werkzeug.utils import secure_filename
|
||||
@@ -73,12 +71,6 @@ BOOKING_PRICE_MAP = {
|
||||
"schultraeger": 0.0,
|
||||
"telefonsupport": 20.0,
|
||||
}
|
||||
|
||||
SMTP_HOST = os.environ.get("SMTP_HOST", "").strip()
|
||||
SMTP_USERNAME = os.environ.get("SMTP_USERNAME", "").strip()
|
||||
SMTP_PASSWORD = os.environ.get("SMTP_PASSWORD", "")
|
||||
SMTP_USE_TLS = os.environ.get("SMTP_USE_TLS", "1").strip().lower() not in {"0", "false", "no"}
|
||||
SMTP_FROM_ADDRESS = os.environ.get("SMTP_FROM_ADDRESS", SMTP_USERNAME or "noreply@localhost").strip()
|
||||
BOOKING_ADMIN_EMAIL_FALLBACK = os.environ.get("BOOKING_ADMIN_EMAIL", "").strip()
|
||||
|
||||
|
||||
@@ -151,12 +143,6 @@ def _env_int(name: str, default: int) -> int:
|
||||
return default
|
||||
|
||||
|
||||
try:
|
||||
SMTP_PORT = max(int(os.environ.get("SMTP_PORT", "587")), 1)
|
||||
except ValueError:
|
||||
SMTP_PORT = 587
|
||||
|
||||
|
||||
MONGO_MAX_POOL_SIZE = max(_env_int("MONGO_MAX_POOL_SIZE", 12), 1)
|
||||
MONGO_MIN_POOL_SIZE = max(_env_int("MONGO_MIN_POOL_SIZE", 0), 0)
|
||||
MONGO_MAX_IDLE_MS = max(_env_int("MONGO_MAX_IDLE_MS", 60000), 1000)
|
||||
@@ -369,28 +355,6 @@ def _select_booking_admin() -> dict | None:
|
||||
return None
|
||||
|
||||
|
||||
def _send_booking_email(recipient_email: str, subject: str, body: str) -> tuple[bool, str]:
|
||||
if not SMTP_HOST or not recipient_email:
|
||||
return False, "SMTP nicht konfiguriert"
|
||||
|
||||
message = EmailMessage()
|
||||
message["Subject"] = subject
|
||||
message["From"] = SMTP_FROM_ADDRESS
|
||||
message["To"] = recipient_email
|
||||
message.set_content(body)
|
||||
|
||||
try:
|
||||
with smtplib.SMTP(SMTP_HOST, SMTP_PORT, timeout=12) as smtp:
|
||||
if SMTP_USE_TLS:
|
||||
smtp.starttls()
|
||||
if SMTP_USERNAME:
|
||||
smtp.login(SMTP_USERNAME, SMTP_PASSWORD)
|
||||
smtp.send_message(message)
|
||||
return True, "E-Mail wurde versendet"
|
||||
except Exception as exc:
|
||||
return False, _sanitize_text(str(exc), 240)
|
||||
|
||||
|
||||
def _sanitize_text(text: str, max_length: int = 255) -> str:
|
||||
"""Sanitize user text input: strip, limit length, and escape HTML."""
|
||||
text = (text or "").strip()
|
||||
@@ -2138,22 +2102,6 @@ def booking_payment():
|
||||
if invoice_client:
|
||||
invoice_client.close()
|
||||
|
||||
if assigned_admin_email:
|
||||
email_subject = f"Neue Zahlungsbuchung: {selected_package}"
|
||||
email_body = (
|
||||
f"Es wurde eine neue direkte Buchung eingereicht.\n\n"
|
||||
f"Paket: {selected_package}\n"
|
||||
f"Ansprechpartner: {form_data['contact_person']}\n"
|
||||
f"Schule: {form_data['school_name']}\n"
|
||||
f"E-Mail: {form_data['contact_email']}\n"
|
||||
f"Telefon: {form_data['contact_phone'] or '-'}\n"
|
||||
f"Rechnungsadresse: {form_data['billing_street']}, {form_data['billing_zip']} {form_data['billing_city']}\n"
|
||||
f"Status: Bitte die Unterlagen in der Rechnungsverwaltung prüfen.\n"
|
||||
f"Buchungsnummer: {booking_number}\n"
|
||||
)
|
||||
mail_ok, mail_message = _send_booking_email(assigned_admin_email, email_subject, email_body)
|
||||
if not mail_ok:
|
||||
flash(f"Rechnung wurde angelegt, E-Mail an den Admin konnte nicht gesendet werden: {mail_message}", "info")
|
||||
except PyMongoError:
|
||||
flash("Buchungsanfrage konnte nicht gesendet werden.", "error")
|
||||
return redirect(url_for("booking_payment", package=package_raw, flow=booking_flow))
|
||||
@@ -2164,7 +2112,7 @@ def booking_payment():
|
||||
success_text = (
|
||||
f"Gesprächstermin für {selected_package} wurde an das Team gesendet."
|
||||
if booking_flow == "consultation"
|
||||
else f"Buchung für {selected_package} wurde an den Admin gesendet."
|
||||
else f"Buchung für {selected_package} wurde erfolgreich erfasst."
|
||||
)
|
||||
flash(success_text, "success")
|
||||
return redirect(url_for("user_chat"))
|
||||
@@ -3066,7 +3014,7 @@ def admin_invoices():
|
||||
invoice_number = _sanitize_text(request.form.get("invoice_number") or "", 120)
|
||||
period = _sanitize_text(request.form.get("period") or "", 20)
|
||||
due_date = _sanitize_text(request.form.get("due_date") or "", 20)
|
||||
status = _sanitize_text(request.form.get("status") or "Offen", 40)
|
||||
status = _sanitize_text(request.form.get("status") or "Zu prüfen", 40)
|
||||
amount_text = _sanitize_text(request.form.get("amount_eur") or "0", 20)
|
||||
normalized_invoice_number = invoice_number or f"INV-{datetime.utcnow().strftime('%Y%m%d%H%M%S')}"
|
||||
pdf_path = _save_invoice_pdf(request.files.get("invoice_pdf"), normalized_invoice_number)
|
||||
@@ -3106,7 +3054,7 @@ def admin_invoices():
|
||||
update_payload = {
|
||||
"invoice_number": invoice_number,
|
||||
"period": _sanitize_text(request.form.get("period") or "", 20),
|
||||
"status": _sanitize_text(request.form.get("status") or "Offen", 40),
|
||||
"status": _sanitize_text(request.form.get("status") or "Zu prüfen", 40),
|
||||
"due_date": _sanitize_text(request.form.get("due_date") or "", 20),
|
||||
"amount_eur": amount,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user