Initial commit
This commit is contained in:
@@ -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>© 2025 - Alle Rechte vorbehalten</p>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
@@ -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 %}
|
||||
Reference in New Issue
Block a user