Files
keyVerwaltung/templates/print_transaction.html
2026-05-19 20:22:18 +02:00

315 lines
7.4 KiB
HTML

<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Druckbeleg</title>
<link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}">
<style>
@page {
size: A4 portrait;
margin: 10mm;
}
:root {
--ccm-bg: #f4f6f8;
--ccm-text: #212121;
--ccm-primary: #da002d;
--ccm-primary-hover: #b00024;
--ccm-header: #2b2f36;
--ccm-surface: #ffffff;
--ccm-border: #d9dee3;
--ccm-muted: #6b7280;
}
body {
margin: 0;
font-family: "Segoe UI", Arial, sans-serif;
color: var(--ccm-text);
background: var(--ccm-bg);
}
.page {
max-width: 960px;
margin: 0 auto;
padding: 2rem;
}
.sheet {
background: var(--ccm-surface);
border: 1px solid var(--ccm-border);
border-radius: 1rem;
box-shadow: 0 12px 30px rgba(43, 47, 54, 0.08);
overflow: hidden;
}
.topbar {
background: linear-gradient(135deg, #da002d 0%, #b00024 100%);
padding: 1rem 1.5rem;
}
.logo-row {
display: flex;
justify-content: flex-start;
align-items: center;
padding: 1.25rem 1.5rem 0;
background: linear-gradient(135deg, #da002d 0%, #b00024 100%);
}
.header {
display: flex;
justify-content: flex-start;
align-items: flex-start;
background: linear-gradient(135deg, #da002d 0%, #b00024 100%);
color: #ffffff;
padding: 1.5rem;
text-align: left;
}
.header-content {
text-align: left;
}
.header img {
height: 28px;
width: auto;
}
.print-logo {
filter: none;
}
h1 {
margin: 0;
font-size: 1.8rem;
}
.subtitle {
margin-top: 0.35rem;
color: rgba(255, 255, 255, 0.9);
}
.content {
padding: 1.5rem;
}
.details {
width: 100%;
border-collapse: collapse;
}
.details th,
.details td {
text-align: left;
padding: 0.75rem 0;
border-bottom: 1px solid var(--ccm-border);
vertical-align: top;
}
.details th {
width: 30%;
color: var(--ccm-muted);
font-weight: 600;
}
.note-box {
margin-top: 1.5rem;
padding: 1rem 1.25rem;
border-left: 4px solid var(--ccm-primary);
background: rgba(218, 0, 45, 0.06);
border-radius: 0.75rem;
}
.signature-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 2rem;
margin-top: 4rem;
}
.signature-box {
min-height: 120px;
display: flex;
flex-direction: column;
justify-content: flex-end;
}
.signature-line {
border-top: 1px solid var(--ccm-text);
padding-top: 0.75rem;
font-weight: 600;
}
.signature-date {
margin-top: 0.5rem;
color: var(--ccm-muted);
font-size: 0.95rem;
}
.print-actions {
display: flex;
gap: 0.75rem;
margin-top: 2rem;
}
.button {
display: inline-block;
padding: 0.75rem 1rem;
border-radius: 0.5rem;
text-decoration: none;
font-weight: 600;
}
.button-primary {
background: var(--ccm-primary);
color: #ffffff;
}
.button-secondary {
background: var(--ccm-bg);
color: var(--ccm-text);
}
@media print {
html,
body {
width: 210mm;
min-height: 297mm;
background: #ffffff;
}
body {
display: flex;
justify-content: center;
}
.print-actions {
display: none;
}
.page {
width: 100%;
max-width: 190mm;
padding: 0;
margin: 0;
}
.sheet {
border: 0;
border-radius: 0;
box-shadow: none;
width: 100%;
min-height: 277mm;
}
.print-logo {
filter: brightness(0) saturate(100%);
}
.topbar {
padding: 0 8mm 8mm;
}
.logo-row {
padding: 0 8mm 6mm;
}
.header {
padding: 8mm;
}
.content {
padding: 8mm;
}
.signature-grid {
margin-top: 26mm;
}
}
@media (max-width: 700px) {
.page {
padding: 1rem;
}
.header {
flex-direction: column;
align-items: flex-start;
}
.signature-grid {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<main class="page">
<section class="sheet">
<div class="topbar"></div>
<div class="logo-row">
<img class="print-logo" src="{{ url_for('static', filename='cancom.svg') }}" alt="CANCOM Logo">
</div>
<div class="header">
<div class="header-content">
<h1>{{ action_labels[transaction.action] }} {{ asset_labels[transaction.asset_type] }}</h1>
<div class="subtitle">{{ print_descriptions[transaction.action] }}</div>
</div>
</div>
<div class="content">
<table class="details">
<tr>
<th>Datum</th>
<td>{{ transaction.created_at }}</td>
</tr>
<tr>
<th>Anwender</th>
<td>{{ transaction.full_name }}</td>
</tr>
<tr>
<th>E-Mail</th>
<td>{{ transaction.email or "-" }}</td>
</tr>
<tr>
<th>Abteilung</th>
<td>{{ transaction.department or "-" }}</td>
</tr>
<tr>
<th>Medium</th>
<td>{{ asset_labels[transaction.asset_type] }}</td>
</tr>
<tr>
<th>{% if transaction.asset_type == 'pool_vehicle' %}Kennzeichen{% else %}Kennung{% endif %}</th>
<td>{{ transaction.asset_code }}</td>
</tr>
<tr>
<th>Bearbeiter</th>
<td>{{ transaction.handled_by or "-" }}</td>
</tr>
</table>
<div class="note-box">
Mit den untenstehenden Unterschriften bestaetigen Bearbeiter und Anwender die korrekte {{ action_labels[transaction.action] | lower }} des angegebenen Mediums.
</div>
<div class="signature-grid">
<div class="signature-box">
<div class="signature-line">{{ transaction.handled_by or "Bearbeiter" }}</div>
<div class="signature-date">Datum: {{ transaction.created_at }}</div>
</div>
<div class="signature-box">
<div class="signature-line">{{ transaction.full_name }}</div>
<div class="signature-date">Datum: {{ transaction.created_at }}</div>
</div>
</div>
</div>
</section>
<div class="print-actions">
<a class="button button-primary" href="#" onclick="window.print(); return false;">Drucken</a>
<a class="button button-secondary" href="{{ url_for('index') }}">Zur Uebersicht</a>
</div>
</main>
</body>
</html>