snapshot: preserve base shell standardization
This commit is contained in:
@@ -1,13 +1,10 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
<!doctype html>
|
|
||||||
<html lang="de">
|
{% block title %}{% trans "Anmeldung" %}{% endblock %}
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
{% block extra_head %}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<style>
|
||||||
<title>{% trans "Anmeldung" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<style>
|
|
||||||
body { margin: 0; font-family: Arial, sans-serif; min-height: 100vh; background: linear-gradient(160deg, #eef6ff, #fff3f3); padding: 24px; }
|
body { margin: 0; font-family: Arial, sans-serif; min-height: 100vh; background: linear-gradient(160deg, #eef6ff, #fff3f3); padding: 24px; }
|
||||||
.card { width: min(420px, calc(100% - 28px)); margin: 0 auto; background: #fff; border: 1px solid #d9e3f0; border-radius: 14px; padding: 20px; box-shadow: 0 12px 30px rgba(28, 45, 79, 0.12); }
|
.card { width: min(420px, calc(100% - 28px)); margin: 0 auto; background: #fff; border: 1px solid #d9e3f0; border-radius: 14px; padding: 20px; box-shadow: 0 12px 30px rgba(28, 45, 79, 0.12); }
|
||||||
h1 { margin: 0 0 8px; font-size: 24px; }
|
h1 { margin: 0 0 8px; font-size: 24px; }
|
||||||
@@ -18,11 +15,14 @@
|
|||||||
.btn { width: 100%; }
|
.btn { width: 100%; }
|
||||||
.errorlist { color: #b91c1c; margin: 6px 0; }
|
.errorlist { color: #b91c1c; margin: 6px 0; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_home=0 %}
|
{% block shell_header %}
|
||||||
<div class="card">
|
{% include 'workflows/includes/app_header.html' %}
|
||||||
<h1>{% trans "Anmeldung" %}</h1>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block shell_body %}
|
||||||
|
<div class="card"><h1>{% trans "Anmeldung" %}</h1>
|
||||||
<p>{% trans "Bitte melden Sie sich mit Ihrem Benutzerkonto an." %}</p>
|
<p>{% trans "Bitte melden Sie sich mit Ihrem Benutzerkonto an." %}</p>
|
||||||
|
|
||||||
<form method="post" action="/accounts/login/">
|
<form method="post" action="/accounts/login/">
|
||||||
@@ -35,5 +35,6 @@
|
|||||||
<button class="btn btn-primary" type="submit">{% trans "Anmelden" %}</button>
|
<button class="btn btn-primary" type="submit">{% trans "Anmelden" %}</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
{% endblock %}
|
||||||
</html>
|
{% endblock %}
|
||||||
|
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
<li><code>/backend/config/</code>: Django settings, WSGI, URL config</li>
|
<li><code>/backend/config/</code>: Django settings, WSGI, URL config</li>
|
||||||
<li><code>/backend/workflows/</code>: application logic, views, models, tasks, templates, static assets</li>
|
<li><code>/backend/workflows/</code>: application logic, views, models, tasks, templates, static assets</li>
|
||||||
<li><code>/backend/workflows/templates/workflows/base_shell.html</code>: standard page shell for new staff-facing pages</li>
|
<li><code>/backend/workflows/templates/workflows/base_shell.html</code>: standard page shell for new staff-facing pages</li>
|
||||||
|
<li>Rule: all interactive app pages should extend <code>base_shell.html</code>; do not rebuild topbar/frame logic in page-local templates.</li>
|
||||||
<li><code>/backend/media/templates/</code>: PDF HTML templates and letterhead source files</li>
|
<li><code>/backend/media/templates/</code>: PDF HTML templates and letterhead source files</li>
|
||||||
<li><code>/backend/media/pdfs/</code>: generated PDF outputs on host volume</li>
|
<li><code>/backend/media/pdfs/</code>: generated PDF outputs on host volume</li>
|
||||||
<li><code>/backend/locale/</code>: translation catalogs</li>
|
<li><code>/backend/locale/</code>: translation catalogs</li>
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
<!doctype html>
|
|
||||||
<html lang="de">
|
{% block title %}{% trans "Form Builder" %}{% endblock %}
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
{% block extra_css %}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<link rel="stylesheet" href="{% static 'workflows/css/form_builder.css' %}" />
|
||||||
<title>{% trans "Form Builder" %}</title>
|
{% endblock %}
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
{% block shell_body %}
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/form_builder.css' %}" />
|
{% include 'workflows/includes/app_header.html' with header_show_home=1 header_inside_shell=1 %}
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="shell">
|
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_home=1 header_inside_shell=1 %}
|
|
||||||
|
|
||||||
<header class="header">
|
<header class="header">
|
||||||
<h1>{% trans "Form Builder" %}</h1>
|
<h1>{% trans "Form Builder" %}</h1>
|
||||||
@@ -166,8 +163,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
{% endblock %}
|
||||||
|
|
||||||
<script src="{% static 'workflows/js/form_builder.js' %}"></script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
{% get_current_language as CURRENT_LANGUAGE %}
|
|
||||||
<!doctype html>
|
{% block title %}{% trans "TUBCO Onboarding & Offboarding Portal" %}{% endblock %}
|
||||||
<html lang="{{ CURRENT_LANGUAGE }}">
|
|
||||||
<head>
|
{% block extra_head %}
|
||||||
<meta charset="utf-8" />
|
<style>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<title>{% trans "TUBCO Onboarding & Offboarding Portal" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<style>
|
|
||||||
:root {
|
:root {
|
||||||
--brand-blue: #000078;
|
--brand-blue: #000078;
|
||||||
--brand-red: #8c1d1d;
|
--brand-red: #8c1d1d;
|
||||||
@@ -442,10 +438,10 @@
|
|||||||
.quick-actions { justify-content: flex-start; }
|
.quick-actions { justify-content: flex-start; }
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
<div class="shell">
|
{% block shell_body %}
|
||||||
<div class="topbar">
|
<div class="topbar">
|
||||||
<div class="brand-wrap">
|
<div class="brand-wrap">
|
||||||
<a class="app-brand" href="/"><img class="brand-logo" src="{% static 'workflows/img/tubco-logo.svg' %}" alt="TUB/CO Logo" /></a>
|
<a class="app-brand" href="/"><img class="brand-logo" src="{% static 'workflows/img/tubco-logo.svg' %}" alt="TUB/CO Logo" /></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -626,6 +622,5 @@
|
|||||||
{% trans "Tipp: Die letzten Vorgänge sehen Sie jederzeit im Anfragen Dashboard." %}
|
{% trans "Tipp: Die letzten Vorgänge sehen Sie jederzeit im Anfragen Dashboard." %}
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</div>
|
{% endblock %}
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
<!doctype html>
|
|
||||||
<html lang="de">
|
{% block title %}{% trans "Integrationen Setup" %}{% endblock %}
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
{% block extra_head %}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<style>
|
||||||
<title>{% trans "Integrationen Setup" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<style>
|
|
||||||
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #0f172a; padding: 20px; }
|
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #0f172a; padding: 20px; }
|
||||||
.shell { max-width: 980px; margin: 0 auto; background: #fff; border: 1px solid #d8e3f0; border-radius: 14px; padding: 16px; }
|
.shell { max-width: 980px; margin: 0 auto; background: #fff; border: 1px solid #d8e3f0; border-radius: 14px; padding: 16px; }
|
||||||
.topbar { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
|
.topbar { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
|
||||||
@@ -70,10 +67,10 @@
|
|||||||
}
|
}
|
||||||
@media (max-width: 760px) { .grid { grid-template-columns: 1fr; } }
|
@media (max-width: 760px) { .grid { grid-template-columns: 1fr; } }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
<div class="shell">
|
{% block shell_body %}
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_home=1 header_inside_shell=1 %}
|
{% include 'workflows/includes/app_header.html' with header_show_home=1 header_inside_shell=1 %}
|
||||||
<h1>{% trans "Integrationen Setup" %}</h1>
|
<h1>{% trans "Integrationen Setup" %}</h1>
|
||||||
<p class="sub">{% trans "Verwalten Sie Nextcloud- und Mail-Konfiguration ohne Backend-Wechsel." %}</p>
|
<p class="sub">{% trans "Verwalten Sie Nextcloud- und Mail-Konfiguration ohne Backend-Wechsel." %}</p>
|
||||||
|
|
||||||
@@ -365,6 +362,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
{% endblock %}
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
<!doctype html>
|
|
||||||
<html lang="de">
|
{% block title %}{% trans "Einweisungs-Builder" %}{% endblock %}
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
{% block extra_head %}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<style>
|
||||||
<title>{% trans "Einweisungs-Builder" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<style>
|
|
||||||
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #1b2b43; padding: 20px; }
|
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #1b2b43; padding: 20px; }
|
||||||
.shell { max-width: 1180px; margin: 0 auto; background: #fff; border: 1px solid #d7e0ea; border-radius: 14px; padding: 18px; }
|
.shell { max-width: 1180px; margin: 0 auto; background: #fff; border: 1px solid #d7e0ea; border-radius: 14px; padding: 18px; }
|
||||||
.topbar { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
|
.topbar { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
|
||||||
@@ -32,10 +29,10 @@
|
|||||||
.actions { white-space: nowrap; }
|
.actions { white-space: nowrap; }
|
||||||
.toolbar { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 10px; flex-wrap: wrap; }
|
.toolbar { display: flex; justify-content: space-between; align-items: center; gap: 10px; margin-bottom: 10px; flex-wrap: wrap; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
<div class="shell">
|
{% block shell_body %}
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_dashboard=1 header_show_home=1 header_inside_shell=1 %}
|
{% include 'workflows/includes/app_header.html' with header_show_dashboard=1 header_show_home=1 header_inside_shell=1 %}
|
||||||
|
|
||||||
<div class="toolbar">
|
<div class="toolbar">
|
||||||
<div>
|
<div>
|
||||||
@@ -143,6 +140,5 @@
|
|||||||
<button class="btn btn-primary" type="submit">{% trans "Checkliste speichern" %}</button>
|
<button class="btn btn-primary" type="submit">{% trans "Checkliste speichern" %}</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
{% endblock %}
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,26 +1,26 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
{% get_current_language as CURRENT_LANGUAGE %}
|
|
||||||
<!doctype html>
|
{% block title %}{% trans "Offboarding-Anfrage" %}{% endblock %}
|
||||||
<html lang="{{ CURRENT_LANGUAGE }}">
|
|
||||||
<head>
|
{% block shell_class %}wrap{% endblock %}
|
||||||
<meta charset="utf-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
{% block extra_css %}
|
||||||
<title>{% trans "Offboarding-Anfrage" %}</title>
|
<link rel="stylesheet" href="{% static 'workflows/css/offboarding_form.css' %}" />
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
{% endblock %}
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/offboarding_form.css' %}" />
|
{% block pre_shell %}
|
||||||
</head>
|
<div id="saved-popup" class="popup-backdrop {% if saved %}show{% endif %}">
|
||||||
<body>
|
|
||||||
<div id="saved-popup" class="popup-backdrop {% if saved %}show{% endif %}">
|
|
||||||
<div class="popup">
|
<div class="popup">
|
||||||
<h3>{% trans "Anfrage gespeichert" %}</h3>
|
<h3>{% trans "Anfrage gespeichert" %}</h3>
|
||||||
<p>{% blocktrans trimmed with request_id=saved_request_id %}Offboarding wurde erfolgreich gespeichert (ID: {{ request_id }}). Das PDF wird im Hintergrund erzeugt.{% endblocktrans %}</p>
|
<p>{% blocktrans trimmed with request_id=saved_request_id %}Offboarding wurde erfolgreich gespeichert (ID: {{ request_id }}). Das PDF wird im Hintergrund erzeugt.{% endblocktrans %}</p>
|
||||||
<button class="btn btn-secondary" type="button" onclick="document.getElementById('saved-popup').classList.remove('show')">{% trans "Schließen" %}</button>
|
<button class="btn btn-secondary" type="button" onclick="document.getElementById('saved-popup').classList.remove('show')">{% trans "Schließen" %}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
<div class="wrap">
|
{% block shell_body %}
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_lang=1 header_show_home=1 header_inside_shell=1 %}
|
{% include 'workflows/includes/app_header.html' with header_show_lang=1 header_show_home=1 header_inside_shell=1 %}
|
||||||
|
|
||||||
<div class="wrap-body">
|
<div class="wrap-body">
|
||||||
<div class="card">
|
<div class="card">
|
||||||
@@ -66,9 +66,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
<script>
|
{% block extra_scripts %}
|
||||||
(function () {
|
<script>(function () {
|
||||||
function byName(name) {
|
function byName(name) {
|
||||||
return document.querySelector('[name="' + name + '"]');
|
return document.querySelector('[name="' + name + '"]');
|
||||||
}
|
}
|
||||||
@@ -120,5 +121,5 @@
|
|||||||
suggestEmail();
|
suggestEmail();
|
||||||
}());
|
}());
|
||||||
</script>
|
</script>
|
||||||
</body>
|
{% endblock %}
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
<!doctype html>
|
|
||||||
<html lang="de">
|
{% block title %}{% trans "Offboarding gespeichert" %}{% endblock %}
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
{% block extra_head %}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<style>
|
||||||
<title>{% trans "Offboarding gespeichert" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<style>
|
|
||||||
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #1b2b43; padding: 24px; }
|
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #1b2b43; padding: 24px; }
|
||||||
.shell { background: #fff; border: 1px solid #d7e0ea; border-radius: 16px; padding: 20px; box-shadow: 0 16px 36px rgba(18,34,56,0.10); }
|
.shell { background: #fff; border: 1px solid #d7e0ea; border-radius: 16px; padding: 20px; box-shadow: 0 16px 36px rgba(18,34,56,0.10); }
|
||||||
h1 { margin: 0 0 10px; color: #000078; }
|
h1 { margin: 0 0 10px; color: #000078; }
|
||||||
@@ -15,11 +12,14 @@
|
|||||||
code { background: #f4f6fa; padding: 2px 6px; border-radius: 6px; }
|
code { background: #f4f6fa; padding: 2px 6px; border-radius: 6px; }
|
||||||
.actions { display:flex; gap:8px; flex-wrap:wrap; margin-top: 14px; }
|
.actions { display:flex; gap:8px; flex-wrap:wrap; margin-top: 14px; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_home=1 %}
|
{% block shell_header %}
|
||||||
<div class="shell">
|
{% include 'workflows/includes/app_header.html' with header_show_home=1 %}
|
||||||
<h1>{% trans "Offboarding gespeichert" %}</h1>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block shell_body %}
|
||||||
|
<h1>{% trans "Offboarding gespeichert" %}</h1>
|
||||||
<p>{% trans "Vorgangs-ID:" %} <code>{{ obj.id }}</code></p>
|
<p>{% trans "Vorgangs-ID:" %} <code>{{ obj.id }}</code></p>
|
||||||
<p>{% trans "Name:" %} <code>{{ obj.full_name }}</code></p>
|
<p>{% trans "Name:" %} <code>{{ obj.full_name }}</code></p>
|
||||||
<p>{% trans "E-Mail:" %} <code>{{ obj.work_email }}</code></p>
|
<p>{% trans "E-Mail:" %} <code>{{ obj.work_email }}</code></p>
|
||||||
@@ -34,6 +34,5 @@
|
|||||||
<a class="btn btn-secondary" href="/offboarding/new/">{% trans "Neue Offboarding-Anfrage erfassen" %}</a>
|
<a class="btn btn-secondary" href="/offboarding/new/">{% trans "Neue Offboarding-Anfrage erfassen" %}</a>
|
||||||
<a class="btn btn-secondary" href="/requests/">{% trans "Zum Dashboard" %}</a>
|
<a class="btn btn-secondary" href="/requests/">{% trans "Zum Dashboard" %}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endblock %}
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
{% get_current_language as CURRENT_LANGUAGE %}
|
|
||||||
<!doctype html>
|
{% block title %}{% trans "Onboarding-Anfrage" %}{% endblock %}
|
||||||
<html lang="{{ CURRENT_LANGUAGE }}">
|
|
||||||
<head>
|
{% block extra_css %}
|
||||||
<meta charset="utf-8" />
|
<link rel="stylesheet" href="{% static 'workflows/css/onboarding_form.css' %}" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
{% endblock %}
|
||||||
<title>{% trans "Onboarding-Anfrage" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
{% block pre_shell %}
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
<div id="saved-popup" class="popup-backdrop {% if saved %}show{% endif %}">
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/onboarding_form.css' %}" />
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div id="saved-popup" class="popup-backdrop {% if saved %}show{% endif %}">
|
|
||||||
<div class="popup">
|
<div class="popup">
|
||||||
<h3>{% trans "Anfrage gespeichert" %}</h3>
|
<h3>{% trans "Anfrage gespeichert" %}</h3>
|
||||||
<p>{% blocktrans trimmed with request_id=saved_request_id %}Onboarding wurde erfolgreich gespeichert (ID: {{ request_id }}). Das PDF wird im Hintergrund erzeugt.{% endblocktrans %}</p>
|
<p>{% blocktrans trimmed with request_id=saved_request_id %}Onboarding wurde erfolgreich gespeichert (ID: {{ request_id }}). Das PDF wird im Hintergrund erzeugt.{% endblocktrans %}</p>
|
||||||
<button class="btn btn-secondary" type="button" onclick="document.getElementById('saved-popup').classList.remove('show')">{% trans "Schließen" %}</button>
|
<button class="btn btn-secondary" type="button" onclick="document.getElementById('saved-popup').classList.remove('show')">{% trans "Schließen" %}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
<div class="shell">
|
{% block shell_body %}
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_lang=1 header_show_home=1 header_inside_shell=1 %}
|
{% include 'workflows/includes/app_header.html' with header_show_lang=1 header_show_home=1 header_inside_shell=1 %}
|
||||||
|
|
||||||
<div class="shell-body">
|
<div class="shell-body">
|
||||||
<aside class="panel">
|
<aside class="panel">
|
||||||
@@ -162,9 +160,10 @@
|
|||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
<script>
|
{% block extra_scripts %}
|
||||||
(function () {
|
<script>(function () {
|
||||||
const pages = Array.from(document.querySelectorAll('.page'));
|
const pages = Array.from(document.querySelectorAll('.page'));
|
||||||
const navItems = Array.from(document.querySelectorAll('.step-item'));
|
const navItems = Array.from(document.querySelectorAll('.step-item'));
|
||||||
const btnPrev = document.getElementById('btn-prev');
|
const btnPrev = document.getElementById('btn-prev');
|
||||||
@@ -418,5 +417,5 @@
|
|||||||
updateStep();
|
updateStep();
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
</body>
|
{% endblock %}
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
<!doctype html>
|
|
||||||
<html lang="de">
|
{% block title %}{% trans "Einweisung durchführen" %}{% endblock %}
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
{% block extra_head %}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<style>
|
||||||
<title>{% trans "Einweisung durchführen" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<style>
|
|
||||||
:root {
|
:root {
|
||||||
--brand-blue: #000078;
|
--brand-blue: #000078;
|
||||||
--ink: #17253b;
|
--ink: #17253b;
|
||||||
@@ -55,10 +52,10 @@
|
|||||||
.actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
|
.actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
|
||||||
@media (max-width: 900px) { .meta, .items { grid-template-columns: 1fr; } .meta-grid { grid-template-columns: 1fr; } .item:nth-last-child(-n+2) { border-bottom: 1px solid #eef3f8; } .item:last-child { border-bottom: 0; } }
|
@media (max-width: 900px) { .meta, .items { grid-template-columns: 1fr; } .meta-grid { grid-template-columns: 1fr; } .item:nth-last-child(-n+2) { border-bottom: 1px solid #eef3f8; } .item:last-child { border-bottom: 0; } }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
<div class="shell">
|
{% block shell_body %}
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_dashboard=1 header_show_home=1 header_inside_shell=1 %}
|
{% include 'workflows/includes/app_header.html' with header_show_dashboard=1 header_show_home=1 header_inside_shell=1 %}
|
||||||
|
|
||||||
<div class="hero">
|
<div class="hero">
|
||||||
<h1>{% trans "Einweisung durchführen" %}</h1>
|
<h1>{% trans "Einweisung durchführen" %}</h1>
|
||||||
@@ -149,5 +146,5 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
{% endblock %}
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
<!doctype html>
|
|
||||||
<html lang="de">
|
{% block title %}{% trans "Onboarding gespeichert" %}{% endblock %}
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
{% block extra_head %}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<style>
|
||||||
<title>{% trans "Onboarding gespeichert" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<style>
|
|
||||||
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #1b2b43; padding: 24px; }
|
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #1b2b43; padding: 24px; }
|
||||||
.shell { background: #fff; border: 1px solid #d7e0ea; border-radius: 16px; padding: 20px; box-shadow: 0 16px 36px rgba(18,34,56,0.10); }
|
.shell { background: #fff; border: 1px solid #d7e0ea; border-radius: 16px; padding: 20px; box-shadow: 0 16px 36px rgba(18,34,56,0.10); }
|
||||||
h1 { margin: 0 0 10px; color: #000078; }
|
h1 { margin: 0 0 10px; color: #000078; }
|
||||||
@@ -15,11 +12,14 @@
|
|||||||
code { background: #f4f6fa; padding: 2px 6px; border-radius: 6px; }
|
code { background: #f4f6fa; padding: 2px 6px; border-radius: 6px; }
|
||||||
.actions { display:flex; gap:8px; flex-wrap:wrap; margin-top: 14px; }
|
.actions { display:flex; gap:8px; flex-wrap:wrap; margin-top: 14px; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_home=1 %}
|
{% block shell_header %}
|
||||||
<div class="shell">
|
{% include 'workflows/includes/app_header.html' with header_show_home=1 %}
|
||||||
<h1>{% trans "Anfrage erfolgreich gespeichert" %}</h1>
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block shell_body %}
|
||||||
|
<h1>{% trans "Anfrage erfolgreich gespeichert" %}</h1>
|
||||||
<p>{% trans "Vorgangs-ID:" %} <code>{{ obj.id }}</code></p>
|
<p>{% trans "Vorgangs-ID:" %} <code>{{ obj.id }}</code></p>
|
||||||
<p>{% trans "Name:" %} <code>{{ obj.full_name }}</code></p>
|
<p>{% trans "Name:" %} <code>{{ obj.full_name }}</code></p>
|
||||||
<p>{% trans "E-Mail:" %} <code>{{ obj.work_email }}</code></p>
|
<p>{% trans "E-Mail:" %} <code>{{ obj.work_email }}</code></p>
|
||||||
@@ -33,6 +33,5 @@
|
|||||||
<a class="btn btn-secondary" href="/onboarding/new/">{% trans "Neue Anfrage erfassen" %}</a>
|
<a class="btn btn-secondary" href="/onboarding/new/">{% trans "Neue Anfrage erfassen" %}</a>
|
||||||
<a class="btn btn-secondary" href="/requests/">{% trans "Zum Dashboard" %}</a>
|
<a class="btn btn-secondary" href="/requests/">{% trans "Zum Dashboard" %}</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
{% endblock %}
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -194,6 +194,7 @@
|
|||||||
<li><strong>Einweisungs- und Übergabeprotokoll:</strong> staff-only <code>PDF erzeugen</code>, <code>Neu erzeugen</code>, and <code>PDF öffnen</code> actions directly on onboarding rows in the Requests Dashboard.</li>
|
<li><strong>Einweisungs- und Übergabeprotokoll:</strong> staff-only <code>PDF erzeugen</code>, <code>Neu erzeugen</code>, and <code>PDF öffnen</code> actions directly on onboarding rows in the Requests Dashboard.</li>
|
||||||
<li><strong>Einweisung durchführen:</strong> staff-only live checklist page opened from onboarding rows, with draft/completed status, notes, progress tracking, and a separate live-status PDF export.</li>
|
<li><strong>Einweisung durchführen:</strong> staff-only live checklist page opened from onboarding rows, with draft/completed status, notes, progress tracking, and a separate live-status PDF export.</li>
|
||||||
<li><strong>Project Wiki:</strong> this documentation page.</li>
|
<li><strong>Project Wiki:</strong> this documentation page.</li>
|
||||||
|
<li><strong>UI Shell Standard:</strong> interactive app pages should extend <code>base_shell.html</code>; PDF templates under <code>backend/media/templates/</code> must stay separate.</li>
|
||||||
<li><strong>Release Checklist:</strong> dedicated staff-only release runbook for validation, rollout evidence, and rollback basics.</li>
|
<li><strong>Release Checklist:</strong> dedicated staff-only release runbook for validation, rollout evidence, and rollback basics.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,10 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
{% get_current_language as CURRENT_LANGUAGE %}
|
|
||||||
<!doctype html>
|
{% block title %}{% trans "Anfragen Dashboard" %}{% endblock %}
|
||||||
<html lang="{{ CURRENT_LANGUAGE }}">
|
|
||||||
<head>
|
{% block extra_head %}
|
||||||
<meta charset="utf-8" />
|
<style>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
||||||
<title>{% trans "Anfragen Dashboard" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<style>
|
|
||||||
:root {
|
:root {
|
||||||
--brand-blue: #000078;
|
--brand-blue: #000078;
|
||||||
--brand-blue-soft: #1f4fd6;
|
--brand-blue-soft: #1f4fd6;
|
||||||
@@ -873,10 +869,10 @@
|
|||||||
.table-wrap { padding-left: 12px; padding-right: 12px; }
|
.table-wrap { padding-left: 12px; padding-right: 12px; }
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
<div class="shell">
|
{% block shell_body %}
|
||||||
<div class="topbar">
|
<div class="topbar">
|
||||||
<div class="brand-wrap">
|
<div class="brand-wrap">
|
||||||
<a class="app-brand" href="/"><img class="brand-logo" src="{% static 'workflows/img/tubco-logo.svg' %}" alt="TUB/CO Logo" /></a>
|
<a class="app-brand" href="/"><img class="brand-logo" src="{% static 'workflows/img/tubco-logo.svg' %}" alt="TUB/CO Logo" /></a>
|
||||||
</div>
|
</div>
|
||||||
@@ -1001,9 +997,10 @@
|
|||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
<div class="search-help">{% trans "Datensätze können direkt in der Tabelle gefiltert, geöffnet, geprüft oder gelöscht werden." %}</div>
|
<div class="search-help">{% trans "Datensätze können direkt in der Tabelle gefiltert, geöffnet, geprüft oder gelöscht werden." %}</div>
|
||||||
</div>
|
{% endblock %}
|
||||||
{% if request.user.is_staff %}
|
|
||||||
<div class="control-stack">
|
{% block extra_scripts %}
|
||||||
|
{% if request.user.is_staff %}<div class="control-stack">
|
||||||
<form method="post" action="/requests/" id="bulk-delete-form" onsubmit="return confirm('Ausgewählte Einträge wirklich löschen?');">
|
<form method="post" action="/requests/" id="bulk-delete-form" onsubmit="return confirm('Ausgewählte Einträge wirklich löschen?');">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div class="bulk-toolbar">
|
<div class="bulk-toolbar">
|
||||||
@@ -1144,5 +1141,5 @@
|
|||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</body>
|
{% endblock %}
|
||||||
</html>
|
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
|
{% extends 'workflows/base_shell.html' %}
|
||||||
{% load static i18n %}
|
{% load static i18n %}
|
||||||
<!doctype html>
|
|
||||||
<html lang="de">
|
{% block title %}{% trans "Welcome E-Mails" %}{% endblock %}
|
||||||
<head>
|
|
||||||
<meta charset="utf-8" />
|
{% block extra_head %}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
<style>
|
||||||
<title>{% trans "Welcome E-Mails" %}</title>
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/buttons.css' %}" />
|
|
||||||
<link rel="stylesheet" href="{% static 'workflows/css/app_chrome.css' %}" />
|
|
||||||
<style>
|
|
||||||
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #0f172a; padding: 20px; }
|
body { margin: 0; font-family: Arial, sans-serif; background: #f4f8ff; color: #0f172a; padding: 20px; }
|
||||||
.shell { max-width: 1100px; margin: 0 auto; background: #fff; border: 1px solid #d8e3f0; border-radius: 14px; padding: 16px; }
|
.shell { max-width: 1100px; margin: 0 auto; background: #fff; border: 1px solid #d8e3f0; border-radius: 14px; padding: 16px; }
|
||||||
.topbar { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
|
.topbar { display: flex; justify-content: space-between; align-items: center; gap: 10px; flex-wrap: wrap; }
|
||||||
@@ -41,10 +38,10 @@
|
|||||||
.select-col { width: 42px; text-align: center; }
|
.select-col { width: 42px; text-align: center; }
|
||||||
.bulk-note { color: #64748b; font-size: 12px; }
|
.bulk-note { color: #64748b; font-size: 12px; }
|
||||||
</style>
|
</style>
|
||||||
</head>
|
{% endblock %}
|
||||||
<body>
|
|
||||||
<div class="shell">
|
{% block shell_body %}
|
||||||
{% include 'workflows/includes/app_header.html' with header_show_home=1 header_inside_shell=1 %}
|
{% include 'workflows/includes/app_header.html' with header_show_home=1 header_inside_shell=1 %}
|
||||||
<h1>{% trans "Geplante Welcome E-Mails" %}</h1>
|
<h1>{% trans "Geplante Welcome E-Mails" %}</h1>
|
||||||
<p class="sub">{% trans "Welcome-Mails konfigurieren und geplante Mails steuern (sofort senden, pausieren, fortsetzen, abbrechen)." %}</p>
|
<p class="sub">{% trans "Welcome-Mails konfigurieren und geplante Mails steuern (sofort senden, pausieren, fortsetzen, abbrechen)." %}</p>
|
||||||
|
|
||||||
@@ -180,9 +177,10 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
{% endblock %}
|
||||||
<script>
|
|
||||||
(function () {
|
{% block extra_scripts %}
|
||||||
|
<script>(function () {
|
||||||
const selectAll = document.getElementById('select-all-welcome');
|
const selectAll = document.getElementById('select-all-welcome');
|
||||||
const rowChecks = Array.from(document.querySelectorAll('.welcome-select'));
|
const rowChecks = Array.from(document.querySelectorAll('.welcome-select'));
|
||||||
const selectedCount = document.getElementById('selected-count');
|
const selectedCount = document.getElementById('selected-count');
|
||||||
@@ -235,5 +233,5 @@
|
|||||||
syncState();
|
syncState();
|
||||||
})();
|
})();
|
||||||
</script>
|
</script>
|
||||||
</body>
|
{% endblock %}
|
||||||
</html>
|
|
||||||
|
|||||||
Reference in New Issue
Block a user