UX: Upgrades-Tab — Button zeigt vorhandene Rechnung an, SW by-v1074
- Backend: /admin/upgrade-requests liefert pro Request die offene Rechnung (id+number+status) per Subquery aus der invoices-Tabelle (status draft|sent → also nicht bezahlt, nicht storniert) - Frontend: Wenn schon eine Rechnung existiert, wird statt 'Rechnung erstellen' (orange) der Button 'Rechnung bearbeiten' (gelb, #eab308) gezeigt. Klick lädt die Rechnung und öffnet das Modal im Edit-Modus — kein doppeltes Anlegen, Nummerierung bleibt sauber.
This commit is contained in:
parent
e5abdcab62
commit
5886e1b269
6 changed files with 53 additions and 12 deletions
|
|
@ -3569,6 +3569,15 @@ window.Page_admin = (() => {
|
|||
</div>
|
||||
</div>
|
||||
<div style="display:grid;grid-template-columns:1fr 1fr;gap:var(--space-2);margin-top:var(--space-3)">
|
||||
${r.existing_invoice_id ? `
|
||||
<button class="btn adm-invoice-edit-btn"
|
||||
data-invoice-id="${r.existing_invoice_id}"
|
||||
title="Rechnung ${_esc(r.existing_invoice_number)} (${_esc(r.existing_invoice_status)}) bearbeiten"
|
||||
style="background:#eab308;color:#1a1a1a;border:none;
|
||||
padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);
|
||||
cursor:pointer;font-size:var(--text-sm);font-weight:600">
|
||||
${UI.icon('receipt')} Rechnung bearbeiten
|
||||
</button>` : `
|
||||
<button class="btn adm-invoice-btn"
|
||||
data-name="${_esc(r.name)}" data-email="${_esc(r.email)}"
|
||||
data-tier="${r.tier}" data-address="${_esc(r.billing_address || '')}"
|
||||
|
|
@ -3579,7 +3588,7 @@ window.Page_admin = (() => {
|
|||
padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);
|
||||
cursor:pointer;font-size:var(--text-sm);font-weight:600">
|
||||
${UI.icon('receipt')} Rechnung erstellen
|
||||
</button>
|
||||
</button>`}
|
||||
<button class="btn adm-fulfill-btn" data-id="${r.id}" data-name="${_esc(r.name)}" data-tier="${r.tier}"
|
||||
style="background:#16a34a;color:#fff;border:none;
|
||||
padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);
|
||||
|
|
@ -3699,6 +3708,29 @@ window.Page_admin = (() => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
// "Rechnung bearbeiten" — lädt existierenden Entwurf/Sent-Rechnung im Edit-Modus
|
||||
el.querySelectorAll('.adm-invoice-edit-btn').forEach(btn => {
|
||||
btn.addEventListener('click', async () => {
|
||||
try {
|
||||
const inv = await API.get(`/admin/invoices/${btn.dataset.invoiceId}`);
|
||||
_openNeueRechnungModal(() => {
|
||||
_tab = 'rechnungen';
|
||||
_renderTab();
|
||||
}, {
|
||||
recipient_name: inv.recipient_name,
|
||||
recipient_email: inv.recipient_email,
|
||||
recipient_address: inv.recipient_address || '',
|
||||
service_period: inv.service_period || '',
|
||||
discount_pct: inv.discount_pct || 0,
|
||||
notes: inv.notes || '',
|
||||
items: inv.items.map(it => ({ description: it.description, quantity: it.quantity, unit_price: it.unit_price })),
|
||||
}, inv.id);
|
||||
} catch (e) {
|
||||
UI.toast.error(e.message || 'Rechnung konnte nicht geladen werden.');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue