Initial commit

This commit is contained in:
2025-12-27 16:34:31 +01:00
commit 2284808043
16 changed files with 1841 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Bewerbungsformular{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
<div class="container">
<header>
<h1>{% block header %}Bewerbungsformular{% endblock %}</h1>
</header>
<main>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
<div class="messages">
{% for category, message in messages %}
<div class="message message-{{ category }}">
{{ message }}
</div>
{% endfor %}
</div>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</main>
<footer>
<p>&copy; 2025 - Alle Rechte vorbehalten</p>
</footer>
</div>
</body>
</html>
+35
View File
@@ -0,0 +1,35 @@
{% extends "base.html" %}
{% block title %}Bewerbung - E-Mail Eingabe{% endblock %}
{% block header %}Bewerbung: {{ job_name }}{% endblock %}
{% block content %}
<div class="page-intro">
<h2>Willkommen zum Bewerbungsformular</h2>
<p>Vielen Dank für Ihr Interesse an der Position <strong>{{ job_name }}</strong>.</p>
<p>Bitte geben Sie zunächst Ihre E-Mail-Adresse ein. Sie erhalten dann einen Link, mit dem Sie Ihre Bewerbung jederzeit fortsetzen können.</p>
</div>
<form method="POST" action="{{ url_for('submit_email') }}" class="application-form">
<input type="hidden" name="job_name" value="{{ job_name }}">
<div class="form-group">
<label for="email">E-Mail-Adresse *</label>
<input
type="email"
id="email"
name="email"
required
placeholder="ihre.email@beispiel.de"
aria-required="true">
<small>Sie erhalten einen Link zum Fortsetzen Ihrer Bewerbung.</small>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Weiter</button>
</div>
<p class="required-note">* Pflichtfelder</p>
</form>
{% endblock %}
+133
View File
@@ -0,0 +1,133 @@
{% extends "base.html" %}
{% block title %}Bewerbung - Persönliche Daten{% endblock %}
{% block header %}Bewerbung: {{ job_name }}{% endblock %}
{% block content %}
<div class="page-intro">
<h2>Schritt 1 von 3: Persönliche Daten</h2>
<p>Bitte geben Sie Ihre persönlichen Informationen ein. Alle Felder mit * sind Pflichtfelder.</p>
</div>
<form method="POST" action="{{ url_for('submit_personal', session_id=session_id) }}" class="application-form">
<div class="form-section">
<h3>Persönliche Informationen</h3>
<div class="form-group">
<label for="name">Nachname *</label>
<input
type="text"
id="name"
name="name"
required
maxlength="255"
value="{{ data.name or '' }}"
aria-required="true">
</div>
<div class="form-group">
<label for="firstname">Vorname *</label>
<input
type="text"
id="firstname"
name="firstname"
required
maxlength="255"
value="{{ data.firstname or '' }}"
aria-required="true">
</div>
<div class="form-group">
<label for="address">Adresse *</label>
<input
type="text"
id="address"
name="address"
required
maxlength="255"
value="{{ data.address or '' }}"
placeholder="Straße und Hausnummer"
aria-required="true">
</div>
<div class="form-row">
<div class="form-group">
<label for="zip_code">PLZ *</label>
<input
type="text"
id="zip_code"
name="zip_code"
required
maxlength="10"
value="{{ data.zip_code or '' }}"
pattern="[0-9]{1,10}"
aria-required="true">
</div>
<div class="form-group">
<label for="city">Stadt *</label>
<input
type="text"
id="city"
name="city"
required
maxlength="255"
value="{{ data.city or '' }}"
aria-required="true">
</div>
</div>
<div class="form-group">
<label for="phone">Telefonnummer *</label>
<input
type="tel"
id="phone"
name="phone"
required
value="{{ data.phone or '' }}"
placeholder="+41 79 123 45 67"
pattern="\+\d{1,3}[\s\d]{1,20}"
aria-required="true">
<small>Bitte im internationalen Format eingeben (z.B. +41 79 123 45 67)</small>
</div>
</div>
<div class="form-section">
<h3>Zusätzliche Informationen</h3>
<div class="form-group">
<label for="birth_year">Geburtsjahr *</label>
<input
type="text"
id="birth_year"
name="birth_year"
required
maxlength="4"
value="{{ data.birth_year or '' }}"
placeholder="1990"
pattern="[0-9]{4}"
aria-required="true">
<small>Bitte vierstellig eingeben (z.B. 1990)</small>
</div>
<div class="form-group">
<label for="civil_status">Zivilstand</label>
<input
type="text"
id="civil_status"
name="civil_status"
maxlength="255"
value="{{ data.civil_status or '' }}"
placeholder="Optional">
</div>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Weiter zu Schritt 2</button>
</div>
<p class="required-note">* Pflichtfelder</p>
</form>
{% endblock %}
+68
View File
@@ -0,0 +1,68 @@
{% extends "base.html" %}
{% block title %}Bewerbung - Motivation{% endblock %}
{% block header %}Bewerbung: {{ job_name }}{% endblock %}
{% block content %}
<div class="page-intro">
<h2>Schritt 2 von 3: Motivation und Qualifikationen</h2>
<p>Bitte beantworten Sie die folgenden Fragen. Alle Angaben sind optional, helfen uns aber, Sie besser kennenzulernen.</p>
<p><small>Maximal ca. 3000 Zeichen pro Antwort (etwa eine A4-Seite)</small></p>
</div>
<form method="POST" action="{{ url_for('submit_motivation', session_id=session_id) }}" class="application-form">
<div class="form-group">
<label for="current_job">Bitte beschreiben Sie Ihre aktuelle berufliche Situation.</label>
<textarea
id="current_job"
name="current_job"
rows="6"
maxlength="3000"
placeholder="Optional - Ihre aktuelle Tätigkeit, Position, Verantwortlichkeiten...">{{ data.current_job or '' }}</textarea>
<small class="char-count">Noch <span id="current_job_count">3000</span> Zeichen verfügbar</small>
</div>
<div class="form-group">
<label for="motivation">Was motiviert Sie, für uns zu arbeiten?</label>
<textarea
id="motivation"
name="motivation"
rows="6"
maxlength="3000"
placeholder="Optional - Ihre Motivation, Interessen an unserem Unternehmen...">{{ data.motivation or '' }}</textarea>
<small class="char-count">Noch <span id="motivation_count">3000</span> Zeichen verfügbar</small>
</div>
<div class="form-group">
<label for="qualifications">Bitte nennen Sie uns Ihre besonderen Qualifikationen für diese Stelle.</label>
<textarea
id="qualifications"
name="qualifications"
rows="6"
maxlength="3000"
placeholder="Optional - Ihre Fähigkeiten, Erfahrungen, Ausbildungen...">{{ data.qualifications or '' }}</textarea>
<small class="char-count">Noch <span id="qualifications_count">3000</span> Zeichen verfügbar</small>
</div>
<div class="form-group">
<label for="salary">Was sind Ihre Gehaltsvorstellungen (brutto, basierend auf Vollzeitbeschäftigung)?</label>
<textarea
id="salary"
name="salary"
rows="4"
maxlength="3000"
placeholder="Optional - Ihre Gehaltsvorstellungen...">{{ data.salary or '' }}</textarea>
<small class="char-count">Noch <span id="salary_count">3000</span> Zeichen verfügbar</small>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-primary">Weiter zu Schritt 3</button>
</div>
</form>
<noscript>
<p class="info-message">Die Zeichenzähler funktionieren nur mit aktiviertem JavaScript. Die Validierung erfolgt beim Absenden des Formulars.</p>
</noscript>
{% endblock %}
+72
View File
@@ -0,0 +1,72 @@
{% extends "base.html" %}
{% block title %}Bewerbung - Dokumente{% endblock %}
{% block header %}Bewerbung: {{ job_name }}{% endblock %}
{% block content %}
<div class="page-intro">
<h2>Schritt 3 von 3: Dokumente hochladen</h2>
<p>Laden Sie Ihre Bewerbungsunterlagen hoch (Lebenslauf, Anschreiben, Zeugnisse, etc.).</p>
<p><small>
Sie können bis zu {{ max_files }} Dokumente hochladen.<br>
Maximale Dateigröße: 4 MB pro Dokument<br>
Bevorzugtes Format: PDF
</small></p>
</div>
{% if uploaded_files %}
<div class="uploaded-files">
<h3>Hochgeladene Dokumente ({{ uploaded_files|length }}/{{ max_files }})</h3>
<ul class="file-list">
{% for file in uploaded_files %}
<li class="file-item">
<span class="file-name">{{ file.original_name }}</span>
<span class="file-size">({{ "%.2f"|format(file.size / 1024 / 1024) }} MB)</span>
<form method="POST" action="{{ url_for('remove_file', session_id=session_id, file_index=loop.index0) }}" style="display: inline;">
<button type="submit" class="btn btn-danger btn-small">Entfernen</button>
</form>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
{% if uploaded_files|length < max_files %}
<div class="upload-section">
<h3>Dokument hochladen</h3>
<form method="POST" action="{{ url_for('upload_file', session_id=session_id) }}" enctype="multipart/form-data" class="upload-form">
<div class="form-group">
<label for="file">Datei auswählen</label>
<input
type="file"
id="file"
name="file"
accept=".pdf,.doc,.docx,.txt,.jpg,.jpeg,.png"
required>
<small>Erlaubte Formate: PDF, DOC, DOCX, TXT, JPG, JPEG, PNG</small>
</div>
<div class="form-actions">
<button type="submit" class="btn btn-secondary">Datei hochladen</button>
</div>
</form>
</div>
{% else %}
<p class="info-message">Sie haben die maximale Anzahl von Dokumenten hochgeladen.</p>
{% endif %}
<div class="submit-section">
<h3>Bewerbung absenden</h3>
<p class="important-note">
Durch Klicken auf "Bewerbung absenden" wird Ihre Bewerbung eingereicht.
Sie können Ihre Bewerbung später noch bearbeiten, solange sie aktiv ist.
</p>
<form method="POST" action="{{ url_for('submit_application', session_id=session_id) }}">
<div class="form-actions">
<button type="submit" class="btn btn-primary btn-large">Bewerbung absenden</button>
</div>
</form>
</div>
{% endblock %}
+38
View File
@@ -0,0 +1,38 @@
{% extends "base.html" %}
{% block title %}Bewerbung - Bestätigung{% endblock %}
{% block header %}Bewerbung erfolgreich eingereicht{% endblock %}
{% block content %}
<div class="confirmation-page">
<div class="success-message">
<h2>Vielen Dank für Ihre Bewerbung!</h2>
<p>Ihre Bewerbung für die Position <strong>{{ job_name }}</strong> wurde erfolgreich eingereicht.</p>
</div>
<div class="confirmation-details">
<h3>Was passiert als Nächstes?</h3>
<ul>
<li>Wir haben Ihre Bewerbung erhalten und werden sie sorgfältig prüfen.</li>
<li>Eine Bestätigung wurde an <strong>{{ email }}</strong> gesendet.</li>
<li>Wir werden uns in Kürze bei Ihnen melden.</li>
</ul>
<h3>Ihre Bewerbung bearbeiten</h3>
<p>
Sie haben den Link zum Fortsetzen Ihrer Bewerbung per E-Mail erhalten.
Mit diesem Link können Sie Ihre Bewerbung jederzeit einsehen und bearbeiten, solange sie aktiv ist.
</p>
</div>
<div class="contact-info">
<h3>Fragen?</h3>
<p>Bei Fragen zu Ihrer Bewerbung können Sie sich gerne an uns wenden.</p>
</div>
<div class="form-actions">
<a href="{{ url_for('index') }}" class="btn btn-secondary">Zur Startseite</a>
</div>
</div>
{% endblock %}