change of the dat4e managment
This commit is contained in:
@@ -163,7 +163,6 @@ def send_register_token(email: str, token: str) -> bool:
|
|||||||
|
|
||||||
def send_password_reset_token(email: str, token: str) -> bool:
|
def send_password_reset_token(email: str, token: str) -> bool:
|
||||||
"""Sends a professionally styled password reset token to the user."""
|
"""Sends a professionally styled password reset token to the user."""
|
||||||
|
|
||||||
subject = "Aktion erforderlich: Ihr Passwort-Zurücksetzungs-Code für Invario"
|
subject = "Aktion erforderlich: Ihr Passwort-Zurücksetzungs-Code für Invario"
|
||||||
|
|
||||||
text_note = (
|
text_note = (
|
||||||
@@ -199,49 +198,51 @@ def generate_main_contract_pdf(
|
|||||||
address: str,
|
address: str,
|
||||||
price: str,
|
price: str,
|
||||||
date: str,
|
date: str,
|
||||||
software_name: str,
|
output_path: str,
|
||||||
output_path: str
|
software_name: str = "Invario Inventarsystem"
|
||||||
):
|
):
|
||||||
"""Generiert das komplette PDF des Hauptvertrages (HV) mit allen Paragraphen und dynamischen Feldern."""
|
"""Generiert den Hauptvertrag mit zentrierter und aufeinander abgestimmter Kopf- und Fußzeilen-Formatierung."""
|
||||||
|
from datetime import datetime
|
||||||
pdf = FPDF()
|
pdf = FPDF()
|
||||||
pdf.add_page()
|
pdf.add_page()
|
||||||
pdf.set_auto_page_break(auto=True, margin=15)
|
pdf.set_auto_page_break(auto=True, margin=15)
|
||||||
|
|
||||||
# Schriftart festlegen
|
# --- KOPFBEREICH (ZENTRIERT & BÜNDIG UNTEREINANDER) ---
|
||||||
pdf.set_font("Helvetica", size=10)
|
|
||||||
|
|
||||||
# --- TITEL ---
|
|
||||||
pdf.set_font("Helvetica", style="B", size=13)
|
pdf.set_font("Helvetica", style="B", size=13)
|
||||||
pdf.cell(0, 6, "Vertrag über die Nutzung der Software-Lizenz", ln=True, align="C")
|
pdf.cell(0, 6, "Vertrag über die Nutzung der Software-Lizenz", ln=True, align="C")
|
||||||
pdf.cell(0, 6, f"{software_name}", ln=True, align="C")
|
pdf.cell(0, 6, f'"{software_name}"', ln=True, align="C")
|
||||||
pdf.ln(6)
|
pdf.ln(6)
|
||||||
|
|
||||||
# --- PARTEIEN ---
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
|
pdf.cell(0, 5, "Zwischen", ln=True, align="C")
|
||||||
pdf.set_font("Helvetica", size=10)
|
pdf.set_font("Helvetica", size=10)
|
||||||
parties_text = (
|
pdf.cell(0, 5, "Invario UG", ln=True, align="C")
|
||||||
"Zwischen\n\n"
|
pdf.cell(0, 5, "Am Sportplatz 10, 83052 Bruckmühl", ln=True, align="C")
|
||||||
"Invario UG\nAm Sportplatz 10, 83052 Bruckmühl\n"
|
pdf.set_font("Helvetica", style="I", size=9)
|
||||||
"-- Anbieter / Lizenzgeber --\n\n"
|
pdf.cell(0, 5, "- Anbieter / Lizenzgeber -", ln=True, align="C")
|
||||||
"und\n\n"
|
pdf.ln(4)
|
||||||
f"{school_name}\n{address}\n"
|
|
||||||
"-- Auftraggeber / Schule --"
|
|
||||||
)
|
|
||||||
pdf.multi_cell(0, 5, parties_text)
|
|
||||||
pdf.ln(6)
|
|
||||||
|
|
||||||
# --- 1. VERTRAGSGEGENSTAND ---
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
|
pdf.cell(0, 5, "und", ln=True, align="C")
|
||||||
|
pdf.set_font("Helvetica", size=10)
|
||||||
|
pdf.cell(0, 5, f"{school_name}", ln=True, align="C")
|
||||||
|
pdf.cell(0, 5, f"{address}", ln=True, align="C")
|
||||||
|
pdf.set_font("Helvetica", style="I", size=9)
|
||||||
|
pdf.cell(0, 5, "- Auftraggeber / Schule -", ln=True, align="C")
|
||||||
|
pdf.ln(8)
|
||||||
|
|
||||||
|
# --- PARAGRAPHEN (1 BIS 8) ---
|
||||||
pdf.set_font("Helvetica", style="B", size=10)
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
pdf.cell(0, 6, "1. Vertragsgegenstand", ln=True)
|
pdf.cell(0, 6, "1. Vertragsgegenstand", ln=True)
|
||||||
pdf.set_font("Helvetica", size=10)
|
pdf.set_font("Helvetica", size=10)
|
||||||
pdf.multi_cell(0, 5,
|
pdf.multi_cell(0, 5,
|
||||||
f"(1) Der Anbieter stellt dem Auftraggeber die Software \"{software_name}\" (nachfolgend \"Software\") als webbasierte Anwendung im Wege des Software-as-a-Service (SaaS) zur Verfügung. Die Software wird auf der vom Anbieter genutzten Infrastruktur betrieben.\n"
|
f'(1) Der Anbieter stellt dem Auftraggeber die Software "{software_name}" (nachfolgend "Software") als webbasierte Anwendung im Wege des Software-as-a-Service (SaaS) zur Verfügung. Die Software wird auf der vom Anbieter genutzten Infrastruktur betrieben.\n'
|
||||||
"(2) Dieser Hauptvertrag wird durch folgende Dokumente ergänzt, die als integrale Bestandteile dieses Vertrages gelten:\n"
|
"(2) Dieser Hauptvertrag wird durch folgende Dokumente ergänzt, die als integrale Bestandteile dieses Vertrages gelten:\n"
|
||||||
"a) Anlage 1: Allgemeine Geschäftsbedingungen (AGB) und Lizenzbedingungen (EULA) des Anbieters\n"
|
"a) Anlage 1: Allgemeine Geschäftsbedingungen (AGB) und Lizenzbedingungen (EULA) des Anbieters\n"
|
||||||
"b) Anlage 2: Auftragsverarbeitungsvertrag (AVV) gemäß Art. 28 DS-GVO nebst technischen und organisatorischen Maßnahmen (TOM)"
|
"b) Anlage 2: Auftragsverarbeitungsvertrag (AVV) gemäß Art. 28 DS-GVO nebst technischen und organisatorischen Maßnahmen (TOM)"
|
||||||
)
|
)
|
||||||
pdf.ln(4)
|
pdf.ln(4)
|
||||||
|
|
||||||
# --- 2. VERTRAGSBEGINN ---
|
|
||||||
pdf.set_font("Helvetica", style="B", size=10)
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
pdf.cell(0, 6, "2. Vertragsbeginn", ln=True)
|
pdf.cell(0, 6, "2. Vertragsbeginn", ln=True)
|
||||||
pdf.set_font("Helvetica", size=10)
|
pdf.set_font("Helvetica", size=10)
|
||||||
@@ -251,18 +252,16 @@ def generate_main_contract_pdf(
|
|||||||
)
|
)
|
||||||
pdf.ln(4)
|
pdf.ln(4)
|
||||||
|
|
||||||
# --- 3. LAUFZEIT UND KÜNDIGUNG ---
|
|
||||||
pdf.set_font("Helvetica", style="B", size=10)
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
pdf.cell(0, 6, "3. Laufzeit und Kündigung", ln=True)
|
pdf.cell(0, 6, "3. Laufzeit und Kündigung", ln=True)
|
||||||
pdf.set_font("Helvetica", size=10)
|
pdf.set_font("Helvetica", size=10)
|
||||||
pdf.multi_cell(0, 5,
|
pdf.multi_cell(0, 5,
|
||||||
"(1) Der Vertrag wird zunächst für die Dauer von zwölf (12) Monaten geschlossen (Mindestlaufzeit).\n"
|
"(1) Der Vertrag wird zunächst für die Dauer von zwölf (12) Monaten geschlossen (Mindestlaufzeit).\n"
|
||||||
"(2) Er verlängert sich automatisch um jeweils ein weiteres Jahr, sofern er nicht von einer Partei mit einer Frist von drei (3) Monaten zum Ende der jeweiligen Laufzeit gekündigt wird.\n"
|
"(2) Er verlängert sich automatisch um jeweils ein weiteres Jahr, sofern er nicht von einer Partei mit einer Frist von drei (3) Monaten zum Ende der jeweiligen Laufzeit gekündigt wird.\n"
|
||||||
"(3) Die Kündigung kann in Textform (z. B. per E-Mail) oder über die dafür vorgesehenen Funktionen im Invario-Portal erfolgen. Das Recht zur außerordentlichen Kündigung aus wichtigem Grund bleibt unberührt."
|
"(3) Die Kündigung kann in Textform (z. B. per E-Mail) oder über die dafür vorgesehene Funktion im Invario-Portal erfolgen. Das Recht zur außerordentlichen Kündigung aus wichtigem Grund bleibt unberührt."
|
||||||
)
|
)
|
||||||
pdf.ln(4)
|
pdf.ln(4)
|
||||||
|
|
||||||
# --- 4. VERGÜTUNG UND BEZAHLUNG ---
|
|
||||||
pdf.set_font("Helvetica", style="B", size=10)
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
pdf.cell(0, 6, "4. Vergütung und Bezahlung", ln=True)
|
pdf.cell(0, 6, "4. Vergütung und Bezahlung", ln=True)
|
||||||
pdf.set_font("Helvetica", size=10)
|
pdf.set_font("Helvetica", size=10)
|
||||||
@@ -273,7 +272,6 @@ def generate_main_contract_pdf(
|
|||||||
)
|
)
|
||||||
pdf.ln(4)
|
pdf.ln(4)
|
||||||
|
|
||||||
# --- 5. NUTZUNG UND SUPPORT ---
|
|
||||||
pdf.set_font("Helvetica", style="B", size=10)
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
pdf.cell(0, 6, "5. Nutzung und Support", ln=True)
|
pdf.cell(0, 6, "5. Nutzung und Support", ln=True)
|
||||||
pdf.set_font("Helvetica", size=10)
|
pdf.set_font("Helvetica", size=10)
|
||||||
@@ -283,7 +281,6 @@ def generate_main_contract_pdf(
|
|||||||
)
|
)
|
||||||
pdf.ln(4)
|
pdf.ln(4)
|
||||||
|
|
||||||
# --- 6. DATENSCHUTZ UND DATENSICHERHEIT ---
|
|
||||||
pdf.set_font("Helvetica", style="B", size=10)
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
pdf.cell(0, 6, "6. Datenschutz und Datensicherheit", ln=True)
|
pdf.cell(0, 6, "6. Datenschutz und Datensicherheit", ln=True)
|
||||||
pdf.set_font("Helvetica", size=10)
|
pdf.set_font("Helvetica", size=10)
|
||||||
@@ -293,17 +290,15 @@ def generate_main_contract_pdf(
|
|||||||
)
|
)
|
||||||
pdf.ln(4)
|
pdf.ln(4)
|
||||||
|
|
||||||
# --- 7. HAFTUNG ---
|
|
||||||
pdf.set_font("Helvetica", style="B", size=10)
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
pdf.cell(0, 6, "7. Haftung", ln=True)
|
pdf.cell(0, 6, "7. Haftung", ln=True)
|
||||||
pdf.set_font("Helvetica", size=10)
|
pdf.set_font("Helvetica", size=10)
|
||||||
pdf.multi_cell(0, 5,
|
pdf.multi_cell(0, 5,
|
||||||
"(1) Die Haftung des Anbieters richtet sich nach den Regelungen in Ziffer 7 der Allgemeinen Geschäftsbedingungen (Anlage 1).\n"
|
"(1) Die Haftung des Anbieters richtet sich nach den Regelungen in Ziffer 7 der Allgemeinen Geschäftsbedingungen (Anlage 1).\n"
|
||||||
"(2) Für Unterbrechungen der Verfügbarkeit durch höhere Gewalt, Störungen im Bereich außerhalb des Übergabepunktes (z. B. Internet-Backbone) sowie für unvorhersehbare Sicherheitslücken, die nach dem aktuellen Stand der Technik zum Zeitpunkt des Auftretens noch nicht abwehrbar waren (Zero-Day-Exploits), haftet the Anbieter nur nach Maßgabe der Haftungsregelungen in den AGB, es sei denn, ihn trifft ein Verschulden an der verzögerten Behebung. Gesetzliche Datenschutzpflichten und Meldepflichten bleiben unberührt."
|
"(2) Für Unterbrechungen der Verfügbarkeit durch höhere Gewalt, Störungen im Bereich außerhalb des Übergabepunktes (z. B. Internet-Backbone) sowie für unvorhersehbare Sicherheitslücken, die nach dem aktuellen Stand der Technik zum Zeitpunkt des Auftretens noch nicht abwehrbar waren (Zero-Day-Exploits), haftet der Anbieter nur nach Maßgabe der Haftungsregelungen in den AGB, es sei denn, ihn trifft ein Verschulden an der verzögerten Behebung. Gesetzliche Datenschutzpflichten und Meldepflichten bleiben unberührt."
|
||||||
)
|
)
|
||||||
pdf.ln(4)
|
pdf.ln(4)
|
||||||
|
|
||||||
# --- 8. SCHLUSSBESTIMMUNGEN ---
|
|
||||||
pdf.set_font("Helvetica", style="B", size=10)
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
pdf.cell(0, 6, "8. Schlussbestimmungen", ln=True)
|
pdf.cell(0, 6, "8. Schlussbestimmungen", ln=True)
|
||||||
pdf.set_font("Helvetica", size=10)
|
pdf.set_font("Helvetica", size=10)
|
||||||
@@ -314,24 +309,33 @@ def generate_main_contract_pdf(
|
|||||||
)
|
)
|
||||||
pdf.ln(6)
|
pdf.ln(6)
|
||||||
|
|
||||||
# --- UNTERSCHRIFTEN ---
|
# --- FUSSBEREICH / UNTERSCHRIFTEN (ZENTRIERT & SYMMETRISCH) ---
|
||||||
pdf.set_font("Helvetica", style="B", size=10)
|
pdf.set_font("Helvetica", style="B", size=10)
|
||||||
pdf.cell(0, 6, "Unterschriften und Einverständnis", ln=True)
|
pdf.cell(0, 6, "Unterschriften und Einverständnis", ln=True, align="C")
|
||||||
pdf.set_font("Helvetica", size=9)
|
pdf.set_font("Helvetica", size=9)
|
||||||
pdf.multi_cell(0, 4, "Mit der Unterzeichnung bestätigen die Parteien den Abschluss des Hauptvertrages inklusive der beigefügten Anlagen (AGB, EULA und AVV).")
|
pdf.multi_cell(0, 4, "Mit der Unterzeichnung bestätigen die Parteien den Abschluss des Hauptvertrages inklusive der beigefügten Anlagen (AGB, EULA und AVV).", align="C")
|
||||||
pdf.ln(8)
|
pdf.ln(8)
|
||||||
|
|
||||||
# Unterschriften-Blöcke nebeneinander
|
# Exakte Zentrierung der zwei Unterschriften-Blöcke
|
||||||
pdf.set_font("Helvetica", size=9)
|
col_width = 85
|
||||||
pdf.cell(95, 5, "Für den Auftraggeber", ln=False)
|
start_x = (210 - (col_width * 2)) / 2 # Berechnet den exakten linken Rand für Symmetrie (20mm)
|
||||||
pdf.cell(95, 5, "Für den Anbieter", ln=True)
|
|
||||||
pdf.ln(8)
|
pdf.set_font("Helvetica", size=9)
|
||||||
pdf.cell(95, 5, f"{date} ____________________________________", ln=False)
|
|
||||||
pdf.cell(95, 5, f"{date} ________________ ____________________", ln=True)
|
pdf.set_x(start_x)
|
||||||
pdf.cell(95, 5, "(Verantwortlicher)", ln=False)
|
pdf.cell(col_width, 5, "Für den Auftraggeber", align="C", ln=False)
|
||||||
pdf.cell(95, 5, "(Simon Brieger)", ln=True)
|
pdf.cell(col_width, 5, "Für den Anbieter", align="C", ln=True)
|
||||||
|
|
||||||
|
pdf.ln(8)
|
||||||
|
|
||||||
|
pdf.set_x(start_x)
|
||||||
|
pdf.cell(col_width, 5, f"{datetime.today().strftime('%Y-%m-%d')} ________________________", align="C", ln=False)
|
||||||
|
pdf.cell(col_width, 5, f"{datetime.today().strftime('%Y-%m-%d')} ________________________", align="C", ln=True)
|
||||||
|
|
||||||
|
pdf.set_x(start_x)
|
||||||
|
pdf.cell(col_width, 5, "(Verantwortlicher)", align="C", ln=False)
|
||||||
|
pdf.cell(col_width, 5, "(Simon Brieger)", align="C", ln=True)
|
||||||
|
|
||||||
# PDF speichern
|
|
||||||
pdf.output(output_path)
|
pdf.output(output_path)
|
||||||
return output_path
|
return output_path
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user