Kundenportal Aufträge: Abschnitt im Reiter Rechnungen, Projekt unter der Rechnungsnummer

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-07 14:15:56 +00:00
1 parent b53f9f67ed
commit 73c5446cf8
4 files changed
+95 -2

No files matched your search

+22 -1
View File
@@ -584,6 +584,13 @@ function renderViewAsBanner(me) {
}
/* ------------------------------------------------------------- Rechnungen --- */
// @rechnungsnummer-anfang
/** Rechnungsnummer mit dem Projekt darunter (Stripe-Metadaten projektName, Feld `projekt`); beides maskiert. */
function invoiceNumberHtml(i) {
const project = i.projekt ? `<span class="inv-project">${escapeHtml(i.projekt)}</span>` : ''
return `${escapeHtml(i.number)}${project}`
}
// @rechnungsnummer-ende
async function loadCustomerInvoices() {
const body = document.getElementById('invoices-body')
if (!body) return
@@ -615,7 +622,7 @@ async function loadCustomerInvoices() {
<tbody>
${invoices.map((i) => `
<tr class="${Number(i.balance) > 0 ? 'is-open' : 'is-paid'}">
<td class="inv-no">${escapeHtml(i.number)}</td>
<td class="inv-no">${invoiceNumberHtml(i)}</td>
<td class="inv-date">${fmtDateShort(i.date)}</td>
<td class="inv-amount">${fmtEuro(i.amount)}</td>
<td class="inv-open">${fmtEuro(i.balance)}</td>
@@ -632,6 +639,19 @@ async function loadCustomerInvoices() {
}
}
// Abschnitt "Aufträge" im Reiter Rechnungen (public/auftrag-portal.js): Fehler lassen den Abschnitt weg und stören die Rechnungen nicht.
function loadCustomerOrders() {
return import('/auftrag-portal.js')
.then((m) => m.initAuftraege({
section: document.getElementById('orders-section'),
body: document.getElementById('orders-body'),
invoicesTitle: document.getElementById('invoices-title'),
request: api,
viewAs: chatState.viewAs,
}))
.catch(() => {})
}
/* -------------------------------------------------------------- Aktivität --- */
// Abschnitt "Was wir zuletzt erledigt haben" unter Projekte: je Auftrag eine Karte mit Status, Fortschrittsleiste
// und Arbeiten (Bausteine der Projektdetails; Texte kommen aufbereitet vom Server). Zuerst die drei neuesten,
@@ -2063,6 +2083,7 @@ async function initDashboardPage() {
if (aboParam) window.history.replaceState(null, '', `/dashboard.html${window.location.hash}`)
loadContracts({ afterCheckout: aboParam === 'success' })
loadCustomerInvoices()
loadCustomerOrders()
activityScrollPending = currentHash() === 'fortschritt'
loadCustomerActivity().then(scrollToActivity)
+1 -1
View File
@@ -149,7 +149,7 @@ body.ab-seite {
.ab-portal .ab-details[open] > summary { margin-bottom: 4px; }
.ab-portal .ab-knopf { border-radius: 999px; }
.ab-rechnungen-titel { font-size: 20px; margin: 0 0 10px; }
.inv-project { display: block; margin-top: 2px; font-size: 12px; font-weight: 400; color: var(--kb-muted, #6b6b70); overflow-wrap: anywhere; }
.inv-project { display: block; margin-top: 2px; font-size: 12.5px; font-weight: 400; color: var(--kb-muted, rgba(255, 255, 255, 0.6)); overflow-wrap: anywhere; }
/* ------------------------------------------------------------------ Installierte App --- */
.ab-app-back { display: none; }
+9
View File
@@ -26,6 +26,7 @@
<link rel="stylesheet" href="/termine.css">
<link rel="stylesheet" href="/shop.css">
<link rel="stylesheet" href="/zeiten.css">
<link rel="stylesheet" href="/auftrag.css">
</head>
<body class="portal-page dashboard-page kb-page">
<div class="dot-background" aria-hidden="true">
@@ -222,6 +223,14 @@
<h1>Rechnungen</h1>
<p>Deine Rechnungen ansehen, bezahlen und herunterladen.</p>
</header>
<!-- Aufträge: Auftragsbestätigungen ansehen und bestätigen (auftrag-portal.js, von app.js loadCustomerOrders); erscheint nur,
wenn Aufträge freigeschaltet sind und der Kunde welche hat -->
<section class="ab-portal hidden" id="orders-section" aria-labelledby="orders-title">
<h2 id="orders-title">Aufträge</h2>
<p class="kb-note">Deine Auftragsbestätigungen. Offene Aufträge bestätigst du hier mit einem Klick.</p>
<div id="orders-body"></div>
</section>
<h2 class="ab-rechnungen-titel hidden" id="invoices-title">Rechnungen</h2>
<div class="kb-panel" id="invoices-body"><p class="kb-empty">Lade…</p></div>
<p class="kb-note hidden" id="invoices-abo-note">Die Zahlungsart für dein Abo änderst du über dein <button type="button" class="kb-link" data-open-account>Profilbild</button> oben rechts unter „Abo verwalten &amp; Rechnungen“.</p>
</section>