Spanisch Deutsch eingefügt Admin_userr,Umsatzübersicht, Seriennummer

This commit is contained in:
Cay 2026-01-27 17:47:14 -01:00
parent 7e5896bc90
commit 114f429429
8 changed files with 162 additions and 55 deletions

View File

@ -4,7 +4,29 @@
"cancel": "Abbrechen",
"search": "Suchen",
"reset": "Reset",
"dashboard": "Dashboard"
"dashboard": "Dashboard",
"logout": "Logout",
"title":"Titel",
"firstname":"Vorname",
"lastname":"Nachname",
"username":"Username",
"role":"Rolle",
"action":"Aktionen",
"status":"Status",
"you":"Du Selbst",
"newuser":"Neuer benutzer",
"inactive":"inaktive",
"active":"aktive",
"closed":"gesperrt",
"filter":"Filtern",
"yearcash":"Jahresumsatz",
"monthcash":"Monatsumsatz",
"quartalcash":"Quartalsumsatz",
"year":"Jahr",
"nodata":"keine Daten",
"month":"Monat",
"patientcash":"Umsatz pro Patient",
"patient":"Patient"
},
"sidebar": {
"patients": "Patienten",
@ -19,8 +41,40 @@
"waitingRoom": "Wartezimmer-Monitor",
"noWaitingPatients": "Keine Patienten im Wartezimmer."
},
"adminSidebar": {
"users": "Userverwaltung",
"database": "Datenbankverwaltung"
"database": "Datenbankverwaltung",
"user":"Benutzer",
"invocieoverview":"Rechnungsübersicht",
"seriennumber":"Seriennummer",
"databasetable":"Datenbank"
},
"adminuseroverview": {
"useroverview": "Benutzerübersicht",
"usermanagement": "Benutzer Verwaltung",
"user":"Benutzer",
"invocieoverview":"Rechnungsübersicht",
"seriennumber":"Seriennummer",
"databasetable":"Datenbank"
},
"seriennumber": {
"seriennumbertitle": "Seriennummer eingeben",
"seriennumbertext": "Bitte gib deine Lizenz-Seriennummer ein um die Software dauerhaft freizuschalten.",
"seriennumbershort":"Seriennummer (AAAAA-AAAAA-AAAAA-AAAAA)",
"seriennumberdeclaration":"Nur Buchstaben + Zahlen. Format: 4×5 Zeichen, getrennt mit „-“. ",
"saveseriennumber":"Seriennummer Speichern"
},
"databaseoverview": {
"title": "Datenbank Konfiguration",
"text":"Hier kannst du die DB-Verbindung testen und speichern. ",
"host": "Host",
"port":"Port",
"database":"Datenbank",
"password":"Password",
"connectiontest":"Verbindung testen"
}
}

View File

@ -4,7 +4,29 @@
"cancel": "Cancelar",
"search": "Buscar",
"reset": "Resetear",
"dashboard": "Panel"
"dashboard": "Panel",
"logout": "cerrar sesión",
"title":"Título",
"firstname":"Nombre",
"lastname":"apellido",
"username":"Nombre de usuario",
"role":"desempeñar",
"action":"acción",
"status":"Estado",
"you":"su mismo",
"newuser":"Nuevo usuario",
"inactive":"inactivo",
"active":"activo",
"closed":"bloqueado",
"filter":"Filtro",
"yearcash":"volumen de negocios anual",
"monthcash":"volumen de negocios mensual",
"quartalcash":"volumen de negocios trimestral",
"year":"ano",
"nodata":"sin datos",
"month":"mes",
"patientcash":"Ingresos por paciente",
"patient":"paciente"
},
"sidebar": {
"patients": "Pacientes",
@ -22,6 +44,37 @@
"adminSidebar": {
"users": "Administración de usuarios",
"database": "Administración de base de datos"
"database": "Administración de base de datos",
"user":"usuario",
"invocieoverview":"Resumen de facturas",
"seriennumber":"número de serie",
"databasetable":"base de datos"
},
"adminuseroverview": {
"useroverview": "Resumen de usuarios",
"usermanagement": "Administración de usuarios",
"user":"usuario",
"invocieoverview":"Resumen de facturas",
"seriennumber":"número de serie",
"databasetable":"base de datos"
},
"seriennumber": {
"seriennumbertitle": "Introduce el número de serie",
"seriennumbertext": "Introduce el número de serie de tu licencia para activar el software de forma permanente.",
"seriennumbershort":"Número de serie (AAAAA-AAAAA-AAAAA-AAAAA)",
"seriennumberdeclaration":"Solo letras y números. Formato: 4×5 caracteres, separados por «-». ",
"saveseriennumber":"Guardar número de serie"
},
"databaseoverview": {
"title": "Configuración de la base de datos",
"host": "Host",
"port":"Puerto",
"database":"Base de datos",
"password":"Contraseña",
"connectiontest":"Probar conexión",
"text":"Aquí puedes probar y guardar la conexión a la base de datos. "
}
}

View File

@ -1,7 +1,7 @@
<!-- ✅ Header -->
<%- include("../partials/page-header", {
user,
title: "Rechnungsübersicht",
title: t.adminSidebar.invocieoverview,
subtitle: "",
showUserName: true
}) %>
@ -33,7 +33,7 @@
</div>
<div class="col-auto">
<button class="btn btn-outline-secondary">Filtern</button>
<button class="btn btn-outline-secondary"><%= t.global.filter %></button>
</div>
</form>
@ -43,12 +43,12 @@
<!-- JAHRESUMSATZ -->
<div class="col-xl-3 col-lg-6">
<div class="card h-100">
<div class="card-header fw-semibold">Jahresumsatz</div>
<div class="card-header fw-semibold"><%= t.global.yearcash%></div>
<div class="card-body p-0">
<table class="table table-sm table-striped mb-0">
<thead>
<tr>
<th>Jahr</th>
<th><%= t.global.year%></th>
<th class="text-end">€</th>
</tr>
</thead>
@ -56,7 +56,7 @@
<% if (!yearly || yearly.length === 0) { %>
<tr>
<td colspan="2" class="text-center text-muted">
Keine Daten
<%= t.global.nodata%>
</td>
</tr>
<% } %>
@ -78,12 +78,12 @@
<!-- QUARTALSUMSATZ -->
<div class="col-xl-3 col-lg-6">
<div class="card h-100">
<div class="card-header fw-semibold">Quartalsumsatz</div>
<div class="card-header fw-semibold"><%= t.global.quartalcash%></div>
<div class="card-body p-0">
<table class="table table-sm table-striped mb-0">
<thead>
<tr>
<th>Jahr</th>
<th><%= t.global.year%></th>
<th>Q</th>
<th class="text-end">€</th>
</tr>
@ -92,7 +92,7 @@
<% if (!quarterly || quarterly.length === 0) { %>
<tr>
<td colspan="3" class="text-center text-muted">
Keine Daten
<%= t.global.nodata%>
</td>
</tr>
<% } %>
@ -115,12 +115,12 @@
<!-- MONATSUMSATZ -->
<div class="col-xl-3 col-lg-6">
<div class="card h-100">
<div class="card-header fw-semibold">Monatsumsatz</div>
<div class="card-header fw-semibold"><%= t.global.monthcash%></div>
<div class="card-body p-0">
<table class="table table-sm table-striped mb-0">
<thead>
<tr>
<th>Monat</th>
<th><%= t.global.month%></th>
<th class="text-end">€</th>
</tr>
</thead>
@ -128,7 +128,7 @@
<% if (!monthly || monthly.length === 0) { %>
<tr>
<td colspan="2" class="text-center text-muted">
Keine Daten
<%= t.global.nodata%>
</td>
</tr>
<% } %>
@ -150,7 +150,7 @@
<!-- UMSATZ PRO PATIENT -->
<div class="col-xl-3 col-lg-6">
<div class="card h-100">
<div class="card-header fw-semibold">Umsatz pro Patient</div>
<div class="card-header fw-semibold"><%= t.global.patientcash%></div>
<div class="card-body p-2">
<!-- Suche -->
@ -166,20 +166,20 @@
placeholder="Patient suchen..."
/>
<button class="btn btn-sm btn-outline-primary">Suchen</button>
<button class="btn btn-sm btn-outline-primary"><%= t.global.search%></button>
<a
href="/admin/invoices?fromYear=<%= fromYear %>&toYear=<%= toYear %>"
class="btn btn-sm btn-outline-secondary"
>
Reset
<%= t.global.reset%>
</a>
</form>
<table class="table table-sm table-striped mb-0">
<thead>
<tr>
<th>Patient</th>
<th><%= t.global.patient%></th>
<th class="text-end">€</th>
</tr>
</thead>
@ -187,7 +187,7 @@
<% if (!patients || patients.length === 0) { %>
<tr>
<td colspan="2" class="text-center text-muted">
Keine Daten
<%= t.global.nodata%>
</td>
</tr>
<% } %>

View File

@ -9,7 +9,7 @@
<!-- ✅ HEADER (wie Dashboard) -->
<%- include("../partials/page-header", {
user,
title: "Datenbankverwaltung",
title: t.adminSidebar.database,
subtitle: "",
showUserName: true,
hideDashboardButton: true
@ -29,18 +29,18 @@
<div class="card-body">
<h4 class="mb-3">
<i class="bi bi-sliders"></i> Datenbank Konfiguration
<i class="bi bi-sliders"></i> <%= t.databaseoverview.title%>
</h4>
<p class="text-muted mb-4">
Hier kannst du die DB-Verbindung testen und speichern.
<%= t.databaseoverview.tittexte%>
</p>
<!-- ✅ TEST + SPEICHERN -->
<form method="POST" action="/admin/database/test" class="row g-3 mb-3" autocomplete="off">
<div class="col-md-6">
<label class="form-label">Host / IP</label>
<label class="form-label"><%= t.databaseoverview.host%> / IP</label>
<input
type="text"
name="host"
@ -52,7 +52,7 @@
</div>
<div class="col-md-3">
<label class="form-label">Port</label>
<label class="form-label"><%= t.databaseoverview.port%></label>
<input
type="number"
name="port"
@ -64,7 +64,7 @@
</div>
<div class="col-md-3">
<label class="form-label">Datenbank</label>
<label class="form-label"><%= t.databaseoverview.database%></label>
<input
type="text"
name="name"
@ -76,7 +76,7 @@
</div>
<div class="col-md-6">
<label class="form-label">Benutzer</label>
<label class="form-label"><%= t.global.user%></label>
<input
type="text"
name="user"
@ -88,7 +88,7 @@
</div>
<div class="col-md-6">
<label class="form-label">Passwort</label>
<label class="form-label"><%= t.databaseoverview.password%></label>
<input
type="password"
name="password"
@ -102,7 +102,7 @@
<div class="col-12 d-flex flex-wrap gap-2">
<button type="submit" class="btn btn-outline-primary">
<i class="bi bi-plug"></i> Verbindung testen
<i class="bi bi-plug"></i> <%= t.databaseoverview.connectiontest%>
</button>
<button
@ -110,7 +110,7 @@
class="btn btn-success"
formaction="/admin/database"
>
<i class="bi bi-save"></i> Speichern
<i class="bi bi-save"></i> <%= t.global.save%>
</button>
</div>

View File

@ -5,7 +5,7 @@
<!-- ✅ HEADER -->
<%- include("partials/page-header", {
user,
title: "User Verwaltung",
title: t.adminuseroverview.usermanagement,
subtitle: "",
showUserName: true
}) %>
@ -20,11 +20,11 @@
<div class="card-body">
<div class="d-flex align-items-center justify-content-between mb-3">
<h4 class="mb-0">Benutzerübersicht</h4>
<h4 class="mb-0"><%= t.adminuseroverview.useroverview %></h4>
<a href="/admin/create-user" class="btn btn-primary">
<i class="bi bi-plus-circle"></i>
Neuer Benutzer
<%= t.global.newuser %>
</a>
</div>
@ -34,13 +34,13 @@
<thead>
<tr>
<th>ID</th>
<th>Titel</th>
<th>Vorname</th>
<th>Nachname</th>
<th>Username</th>
<th>Rolle</th>
<th class="text-center">Status</th>
<th>Aktionen</th>
<th><%= t.global.title %></th>
<th><%= t.global.firstname %></th>
<th><%= t.global.lastname %></th>
<th><%= t.global.username %></th>
<th><%= t.global.role %></th>
<th class="text-center"><%= t.global.status %></th>
<th><%= t.global.action %></th>
</tr>
</thead>
@ -79,11 +79,11 @@
<td class="text-center">
<% if (u.active === 0) { %>
<span class="badge bg-secondary">Inaktiv</span>
<span class="badge bg-secondary"><%= t.global.inactive %></span>
<% } else if (u.lock_until && new Date(u.lock_until) > new Date()) { %>
<span class="badge bg-danger">Gesperrt</span>
<span class="badge bg-danger"><%= t.global.closed %></span>
<% } else { %>
<span class="badge bg-success">Aktiv</span>
<span class="badge bg-success"><%= t.global.active %></span>
<% } %>
</td>
@ -109,7 +109,7 @@
</button>
</form>
<% } else { %>
<span class="badge bg-light text-dark border">👤 Du selbst</span>
<span class="badge bg-light text-dark border">👤 <%= t.global.you %></span>
<% } %>
</td>

View File

@ -32,7 +32,7 @@
class="nav-item <%= active === 'users' ? 'active' : '' %> <%= lockClass(isAdmin) %>"
title="<%= isAdmin ? '' : 'Nur Admin' %>"
>
<i class="bi bi-people"></i> Benutzer
<i class="bi bi-people"></i> <%= t.adminSidebar.user %>
<% if (!isAdmin) { %>
<span style="margin-left:auto;"><i class="bi bi-lock-fill"></i></span>
<% } %>
@ -44,7 +44,7 @@
class="nav-item <%= active === 'invoice_overview' ? 'active' : '' %> <%= lockClass(isAdmin) %>"
title="<%= isAdmin ? '' : 'Nur Admin' %>"
>
<i class="bi bi-calculator"></i> Rechnungsübersicht
<i class="bi bi-calculator"></i> <%= t.adminSidebar.invocieoverview %>
<% if (!isAdmin) { %>
<span style="margin-left:auto;"><i class="bi bi-lock-fill"></i></span>
<% } %>
@ -57,7 +57,7 @@
class="nav-item <%= active === 'serialnumber' ? 'active' : '' %> <%= lockClass(isAdmin) %>"
title="<%= isAdmin ? '' : 'Nur Admin' %>"
>
<i class="bi bi-key"></i> Seriennummer
<i class="bi bi-key"></i> <%= t.adminSidebar.seriennumber %>
<% if (!isAdmin) { %>
<span style="margin-left:auto;"><i class="bi bi-lock-fill"></i></span>
<% } %>
@ -69,7 +69,7 @@
class="nav-item <%= active === 'database' ? 'active' : '' %> <%= lockClass(isAdmin) %>"
title="<%= isAdmin ? '' : 'Nur Admin' %>"
>
<i class="bi bi-hdd-stack"></i> Datenbank
<i class="bi bi-hdd-stack"></i> <%= t.adminSidebar.databasetable %>
<% if (!isAdmin) { %>
<span style="margin-left:auto;"><i class="bi bi-lock-fill"></i></span>
<% } %>

View File

@ -116,7 +116,7 @@
<!-- ✅ Logout -->
<a href="/logout" class="nav-item">
<i class="bi bi-box-arrow-right"></i> Logout
<i class="bi bi-box-arrow-right"></i> <%= t.sidebar.logout %>
</a>
</div>

View File

@ -15,10 +15,10 @@
<div class="content" style="max-width:650px; margin:30px auto;">
<h2>🔑 Seriennummer eingeben</h2>
<h2>🔑 <%= t.seriennumber.seriennumbertitle %></h2>
<p style="color:#777;">
Bitte gib deine Lizenz-Seriennummer ein um die Software dauerhaft freizuschalten.
<%= t.seriennumber.seriennumbertext %>
</p>
<% if (error) { %>
@ -31,7 +31,7 @@
<form method="POST" action="/admin/serial-number" style="max-width: 500px;">
<div class="form-group">
<label>Seriennummer (AAAAA-AAAAA-AAAAA-AAAAA)</label>
<label><%= t.seriennumber.seriennumbershort %></label>
<input
type="text"
name="serial_number"
@ -42,12 +42,12 @@
required
/>
<small style="color:#777; display:block; margin-top:6px;">
Nur Buchstaben + Zahlen. Format: 4×5 Zeichen, getrennt mit „-“.
<%= t.seriennumber.seriennumberdeclaration %>
</small>
</div>
<button class="btn btn-primary" style="margin-top: 15px;">
Seriennummer speichern
<%= t.seriennumber.saveseriennumber %>
</button>
</form>