Feature: Einheitliche Icon-Buttons für Bearbeiten, Ansehen, Löschen und Neu erstellen
This commit is contained in:
parent
b42758eb6e
commit
8c5ddf26b9
25 changed files with 281 additions and 40 deletions
10
Changes.md
10
Changes.md
|
|
@ -2,6 +2,16 @@
|
|||
|
||||
---
|
||||
|
||||
## 2026-05-22 – UI: Einheitliche Icon-Buttons für Bearbeiten/Ansehen/Löschen
|
||||
|
||||
- **Bleistift-Icon** (transparent, ohne Hintergrund – Stil der Direktverbindungs-Kacheln) ersetzt alle „Bearbeiten"- und „Öffnen"-Buttons in `accounts/list`, `customers/show`, `customers/list`, `suppliers/list`, `useradmin/list`, `assets/list`, `belege/list`, `invoices/list`, `invoices/show`
|
||||
- **Auge-Icon** (Kästchen mit Auge) ersetzt die PDF-Buttons in `invoices/list` (PDF), `invoices/show` (PDF herunterladen) sowie den „Ansehen"-Button in `tax/ustva_index`, um „nur ansehen" visuell vom „bearbeiten" abzugrenzen
|
||||
- **Papierkorb-Icon** (transparent, Danger-Farbe) ersetzt alle „Löschen"-Buttons in `accounts/list`, `invoices/list`, `useradmin/list`, `suppliers/list`, `assets/list`, `belege/detail`, `settings/bankimport`, `bank/fints` und `settings/form`
|
||||
- **Plus-Icon** (rund, btn-primary, 1,8rem) ersetzt alle „Neu anlegen/erstellen/hochladen"-Buttons – Topbars (`bank/fints`, Kunden, Lieferanten, Rechnungen, Belege, Wirtschaftsgüter, Konten), Dashboard-Schnellzugriff, Card-Header in `customers/show`, Aktionsspalte in `customers/list` und „Position hinzufügen" im Rechnungsformular
|
||||
- `bank/index.php`: Button „Öffnen" → „Aktivieren" (Status-Toggle, semantisch eindeutiger)
|
||||
|
||||
---
|
||||
|
||||
## 2026-05-21 – Feature: FinTS-Direktverbindung + Vereinheitlichung der Bank-Importquellen
|
||||
|
||||
- **FinTS-Abruf** für Comdirect, DKB und weitere Banken über `nemiah/php-fints` (PHP-Lib für HBCI/FinTS 3.0). Leseabruf mit PIN; TAN-pflichtige Aktionen werden mit klarer Fehlermeldung abgebrochen
|
||||
|
|
|
|||
|
|
@ -125,7 +125,11 @@ class AccountController extends BaseController
|
|||
'accounts' => $accounts,
|
||||
'filter' => $filter,
|
||||
]),
|
||||
'topbarActions' => '<a href="/accounts/new" class="btn btn-primary">+ Konto anlegen</a>',
|
||||
'topbarActions' => '<a href="/accounts/new" class="btn btn-primary" title="Konto anlegen" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">'
|
||||
. '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">'
|
||||
. '<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>'
|
||||
. '</svg>'
|
||||
. '</a>',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,11 @@ class AssetController extends BaseController
|
|||
'content' => $this->renderView('assets/list', [
|
||||
'assets' => $assets,
|
||||
]),
|
||||
'topbarActions' => '<a href="/assets/new" class="btn btn-primary">+ Wirtschaftsgut anlegen</a>',
|
||||
'topbarActions' => '<a href="/assets/new" class="btn btn-primary" title="Wirtschaftsgut anlegen" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">'
|
||||
. '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">'
|
||||
. '<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>'
|
||||
. '</svg>'
|
||||
. '</a>',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -378,7 +378,11 @@ class BankController extends BaseController
|
|||
$view = new View();
|
||||
$view->render('layout/base.php', [
|
||||
'pageTitle' => 'Direktverbindungen',
|
||||
'topbarActions' => '<button type="button" class="btn btn-primary" id="btn-new-connection">NEU</button>',
|
||||
'topbarActions' => '<button type="button" class="btn btn-primary" id="btn-new-connection" title="Neue Direktverbindung anlegen" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">'
|
||||
. '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">'
|
||||
. '<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>'
|
||||
. '</svg>'
|
||||
. '</button>',
|
||||
'content' => $this->renderView('bank/fints', [
|
||||
'connections' => $connections,
|
||||
'providers' => $providers,
|
||||
|
|
|
|||
|
|
@ -45,7 +45,12 @@ class BelegController extends BaseController
|
|||
'page' => $page,
|
||||
'filter' => $filter,
|
||||
]),
|
||||
'topbarActions' => '<a href="/belege/export?' . View::buildQuery($filter) . '" class="btn btn-secondary">CSV Export</a> <a href="/belege/upload" class="btn btn-primary">+ Beleg hochladen</a>',
|
||||
'topbarActions' => '<a href="/belege/export?' . View::buildQuery($filter) . '" class="btn btn-secondary">CSV Export</a> '
|
||||
. '<a href="/belege/upload" class="btn btn-primary" title="Beleg hochladen" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">'
|
||||
. '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">'
|
||||
. '<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>'
|
||||
. '</svg>'
|
||||
. '</a>',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -21,7 +21,11 @@ class CustomerController extends BaseController
|
|||
'customers' => $customers,
|
||||
'filter' => $filter,
|
||||
]),
|
||||
'topbarActions' => '<a href="/customers/new" class="btn btn-primary">+ Kunde anlegen</a>',
|
||||
'topbarActions' => '<a href="/customers/new" class="btn btn-primary" title="Kunde anlegen" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">'
|
||||
. '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">'
|
||||
. '<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>'
|
||||
. '</svg>'
|
||||
. '</a>',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,11 @@ class InvoiceController extends BaseController
|
|||
'filter' => $filter,
|
||||
'settings' => $settings,
|
||||
]),
|
||||
'topbarActions' => '<a href="/invoices/new" class="btn btn-primary">+ Rechnung erstellen</a>',
|
||||
'topbarActions' => '<a href="/invoices/new" class="btn btn-primary" title="Rechnung erstellen" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">'
|
||||
. '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">'
|
||||
. '<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>'
|
||||
. '</svg>'
|
||||
. '</a>',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,11 @@ class SupplierController extends BaseController
|
|||
'content' => $this->renderView('suppliers/list', [
|
||||
'suppliers' => $suppliers,
|
||||
]),
|
||||
'topbarActions' => '<a href="/suppliers/new" class="btn btn-primary">+ Lieferant anlegen</a>',
|
||||
'topbarActions' => '<a href="/suppliers/new" class="btn btn-primary" title="Lieferant anlegen" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">'
|
||||
. '<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">'
|
||||
. '<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>'
|
||||
. '</svg>'
|
||||
. '</a>',
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -62,10 +62,28 @@
|
|||
<td>
|
||||
<div style="display:flex;gap:.5rem">
|
||||
<a href="/accounts/<?= $h($acc['id']) ?>/journal" class="btn btn-secondary btn-sm">Journal</a>
|
||||
<a href="/accounts/<?= $h($acc['id']) ?>/edit" class="btn btn-secondary btn-sm">Bearbeiten</a>
|
||||
<a href="/accounts/<?= $h($acc['id']) ?>/edit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Bearbeiten">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
||||
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<form method="post" action="/accounts/<?= $h($acc['id']) ?>/delete"
|
||||
data-confirm="Konto '<?= $h($acc['kontonummer']) ?>' wirklich löschen?">
|
||||
<button type="submit" class="btn btn-danger btn-sm">Löschen</button>
|
||||
<button type="submit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-danger);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Löschen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="3,6 5,6 21,6"/>
|
||||
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
||||
<path d="M10 11v6M14 11v6"/>
|
||||
<path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -36,16 +36,26 @@
|
|||
<td>
|
||||
<div style="display:flex;gap:.4rem;justify-content:flex-end">
|
||||
<a href="/assets/<?= $h($a['id']) ?>/edit"
|
||||
class="btn btn-secondary btn-sm"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Bearbeiten">
|
||||
<!-- Bleistift -->
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/><path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
||||
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<form method="post" action="/assets/<?= $h($a['id']) ?>/delete" style="margin:0"
|
||||
data-confirm="Wirtschaftsgut "<?= $h($a['bezeichnung']) ?>" wirklich löschen?">
|
||||
<button type="submit" class="btn btn-danger btn-sm" title="Löschen">
|
||||
<!-- Papierkorb -->
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" width="14" height="14"><polyline points="3,6 5,6 21,6"/><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/><path d="M10 11v6M14 11v6"/><path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/></svg>
|
||||
<button type="submit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-danger);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Löschen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="3,6 5,6 21,6"/>
|
||||
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
||||
<path d="M10 11v6M14 11v6"/>
|
||||
<path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ $connectionsJson = json_encode(array_map(fn($c) => [
|
|||
<?php if (empty($connections)): ?>
|
||||
<div class="card">
|
||||
<div class="card-body" style="text-align:center;padding:3rem;color:var(--color-muted)">
|
||||
Noch keine Direktverbindungen konfiguriert. Klicke auf <strong>NEU</strong>, um eine hinzuzufügen.
|
||||
Noch keine Direktverbindungen konfiguriert. Klicke oben rechts auf <strong>+</strong>, um eine hinzuzufügen.
|
||||
</div>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
|
|
@ -283,7 +283,17 @@ $connectionsJson = json_encode(array_map(fn($c) => [
|
|||
</div>
|
||||
|
||||
<div style="display:flex;justify-content:space-between;align-items:center;margin-top:1rem">
|
||||
<button type="button" id="btn-edit-delete" class="btn btn-danger btn-sm">Löschen</button>
|
||||
<button type="button" id="btn-edit-delete"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-danger);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Verbindung löschen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="3,6 5,6 21,6"/>
|
||||
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
||||
<path d="M10 11v6M14 11v6"/>
|
||||
<path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>
|
||||
</svg>
|
||||
</button>
|
||||
<div style="display:flex;gap:.5rem">
|
||||
<button type="button" id="btn-edit-cancel" class="btn btn-secondary">Abbrechen</button>
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
|
|
|
|||
|
|
@ -182,7 +182,7 @@ $months = ['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','D
|
|||
<?php else: ?>
|
||||
<form method="post" action="/bank/<?= (int)$row['id'] ?>/status">
|
||||
<input type="hidden" name="status" value="offen">
|
||||
<button type="submit" class="btn btn-secondary btn-sm">Öffnen</button>
|
||||
<button type="submit" class="btn btn-secondary btn-sm">Aktivieren</button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -117,7 +117,17 @@ $suppliers = $suppliers ?? [];
|
|||
<?php if (!$beleg['locked'] && empty($bookings)): ?>
|
||||
<form method="post" action="/belege/<?= $h($beleg['id']) ?>/delete"
|
||||
data-confirm="Beleg wirklich löschen? Diese Aktion kann nicht rückgängig gemacht werden.">
|
||||
<button type="submit" class="btn btn-danger btn-sm">Löschen</button>
|
||||
<button type="submit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-danger);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Löschen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="3,6 5,6 21,6"/>
|
||||
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
||||
<path d="M10 11v6M14 11v6"/>
|
||||
<path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -166,7 +166,15 @@
|
|||
<td class="td-muted"><?= $h($b['rechnungs_nr'] ?? '–') ?></td>
|
||||
<td class="td-right td-mono"><?= $b['betrag_brutto'] !== null ? View::formatMoney($b['betrag_brutto']) : '–' ?></td>
|
||||
<td onclick="event.stopPropagation()">
|
||||
<a href="/belege/<?= $h($b['id']) ?>" class="btn btn-secondary btn-sm">Öffnen</a>
|
||||
<a href="/belege/<?= $h($b['id']) ?>"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Bearbeiten">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
||||
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
||||
</svg>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
|
|
|
|||
|
|
@ -45,8 +45,20 @@
|
|||
<td class="td-muted"><?= $h($c['payment_days']) ?> Tage</td>
|
||||
<td>
|
||||
<div style="display:flex;gap:.5rem">
|
||||
<a href="/customers/<?= $h($c['id']) ?>/edit" class="btn btn-secondary btn-sm">Bearbeiten</a>
|
||||
<a href="/invoices/new?customer_id=<?= $h($c['id']) ?>" class="btn btn-primary btn-sm">Rechnung</a>
|
||||
<a href="/customers/<?= $h($c['id']) ?>/edit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Bearbeiten">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
||||
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="/invoices/new?customer_id=<?= $h($c['id']) ?>" class="btn btn-primary" title="Neue Rechnung für diesen Kunden" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,15 @@
|
|||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Kundendaten</div>
|
||||
<a href="/customers/<?= $h($customer['id']) ?>/edit" class="btn btn-secondary btn-sm">Bearbeiten</a>
|
||||
<a href="/customers/<?= $h($customer['id']) ?>/edit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Bearbeiten">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
||||
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<table style="width:100%;border-collapse:collapse;font-size:.875rem">
|
||||
|
|
@ -24,7 +32,11 @@
|
|||
<div class="card">
|
||||
<div class="card-header">
|
||||
<div class="card-title">Rechnungen</div>
|
||||
<a href="/invoices/new?customer_id=<?= $h($customer['id']) ?>" class="btn btn-primary btn-sm">+ Neue Rechnung</a>
|
||||
<a href="/invoices/new?customer_id=<?= $h($customer['id']) ?>" class="btn btn-primary" title="Neue Rechnung für diesen Kunden" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
<div class="table-wrap">
|
||||
<table>
|
||||
|
|
|
|||
|
|
@ -79,8 +79,16 @@ $fmt = fn($v) => View::formatMoney($v);
|
|||
|
||||
<!-- Schnellzugriff -->
|
||||
<div style="display:flex;gap:1rem;margin-bottom:1.5rem;flex-wrap:wrap">
|
||||
<a href="/belege/upload" class="btn btn-primary">+ Beleg hochladen</a>
|
||||
<a href="/invoices/new" class="btn btn-secondary">+ Rechnung erstellen</a>
|
||||
<a href="/belege/upload" class="btn btn-primary" title="Beleg hochladen" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="/invoices/new" class="btn btn-primary" title="Rechnung erstellen" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="/tax/ustva" class="btn btn-secondary">UStVA erstellen</a>
|
||||
<a href="/tax/euer/<?= date('Y') ?>" class="btn btn-secondary">EÜR <?= date('Y') ?></a>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -60,7 +60,11 @@ $preCustomer = (int)($_GET['customer_id'] ?? 0);
|
|||
<div class="mb-2">
|
||||
<div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem">
|
||||
<strong>Rechnungspositionen</strong>
|
||||
<button type="button" class="btn btn-primary btn-sm" onclick="showAddLineDialog(this)">+ Position hinzufügen</button>
|
||||
<button type="button" class="btn btn-primary" title="Position hinzufügen" onclick="showAddLineDialog(this)" style="display:inline-flex;align-items:center;justify-content:center;padding:.36rem;border-radius:50%;width:1.8rem;height:1.8rem">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<?php if (isset($errors['lines'])): ?>
|
||||
|
|
|
|||
|
|
@ -60,9 +60,26 @@
|
|||
<td><span class="badge <?= $badgeClass ?>"><?= $h($inv['status']) ?></span></td>
|
||||
<td>
|
||||
<div style="display:flex;gap:.4rem">
|
||||
<a href="/invoices/<?= $h($inv['id']) ?>" class="btn btn-secondary btn-sm">Öffnen</a>
|
||||
<a href="/invoices/<?= $h($inv['id']) ?>"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Bearbeiten">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
||||
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<?php if ($inv['status'] !== 'Entwurf'): ?>
|
||||
<a href="/invoices/<?= $h($inv['id']) ?>/pdf" class="btn btn-secondary btn-sm">PDF</a>
|
||||
<a href="/invoices/<?= $h($inv['id']) ?>/pdf"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="PDF ansehen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<rect x="2" y="4" width="20" height="16" rx="2"/>
|
||||
<path d="M5 12s2.5-4 7-4 7 4 7 4-2.5 4-7 4-7-4-7-4z"/>
|
||||
<circle cx="12" cy="12" r="1.5"/>
|
||||
</svg>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php if (in_array($inv['status'], ['Finalisiert','Gesendet','Bezahlt']) && empty($inv['storno_of_id'])): ?>
|
||||
<form method="post"
|
||||
|
|
@ -75,7 +92,17 @@
|
|||
<?php if (!empty($settings['test_mode'])): ?>
|
||||
<form method="post" action="/invoices/<?= $h($inv['id']) ?>/delete" style="display:inline"
|
||||
onsubmit="return confirm('Rechnung wirklich löschen?')">
|
||||
<button type="submit" class="btn btn-danger btn-sm">Löschen</button>
|
||||
<button type="submit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-danger);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Löschen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="3,6 5,6 21,6"/>
|
||||
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
||||
<path d="M10 11v6M14 11v6"/>
|
||||
<path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -37,14 +37,31 @@ $badgeClass = match($invoice['status']) {
|
|||
</div>
|
||||
<div class="toolbar-right" style="gap:.5rem">
|
||||
<?php if ($invoice['status'] === 'Entwurf'): ?>
|
||||
<a href="/invoices/<?= $h($invoice['id']) ?>/edit" class="btn btn-secondary">Bearbeiten</a>
|
||||
<a href="/invoices/<?= $h($invoice['id']) ?>/edit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Bearbeiten">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
||||
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<form method="post" action="/invoices/<?= $h($invoice['id']) ?>/finalize"
|
||||
data-confirm="Rechnung finalisieren? Danach kann sie nicht mehr bearbeitet werden.">
|
||||
<button type="submit" class="btn btn-primary">Finalisieren & Nummerieren</button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
<?php if ($invoice['status'] !== 'Entwurf'): ?>
|
||||
<a href="/invoices/<?= $h($invoice['id']) ?>/pdf" class="btn btn-secondary">PDF herunterladen</a>
|
||||
<a href="/invoices/<?= $h($invoice['id']) ?>/pdf"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="PDF ansehen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<rect x="2" y="4" width="20" height="16" rx="2"/>
|
||||
<path d="M5 12s2.5-4 7-4 7 4 7 4-2.5 4-7 4-7-4-7-4z"/>
|
||||
<circle cx="12" cy="12" r="1.5"/>
|
||||
</svg>
|
||||
</a>
|
||||
<?php endif; ?>
|
||||
<?php if (!in_array($invoice['status'], ['Entwurf', 'Storniert'])): ?>
|
||||
<button type="button" class="btn btn-primary"
|
||||
|
|
|
|||
|
|
@ -244,7 +244,20 @@ $mappingRowsAfter = [
|
|||
<div class="card-title" style="flex:1">
|
||||
<span class="bi-cell" data-field="name" data-type="text" data-value="<?= $h($fmt['name']) ?>"><?= $h($fmt['name']) ?></span>
|
||||
</div>
|
||||
<button type="button" class="btn btn-danger btn-sm bi-delete-format" data-format-id="<?= $fmtId ?>" data-format-name="<?= $h($fmt['name']) ?>">Löschen</button>
|
||||
<button type="button"
|
||||
class="bi-delete-format"
|
||||
data-format-id="<?= $fmtId ?>"
|
||||
data-format-name="<?= $h($fmt['name']) ?>"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-danger);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Format löschen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="3,6 5,6 21,6"/>
|
||||
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
||||
<path d="M10 11v6M14 11v6"/>
|
||||
<path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</div>
|
||||
<div class="card-body">
|
||||
|
||||
|
|
|
|||
|
|
@ -328,7 +328,17 @@
|
|||
<div style="display:flex;gap:.5rem;flex-wrap:wrap">
|
||||
<button type="submit" class="btn btn-secondary">Hochladen</button>
|
||||
<?php if (!empty($settings['logo_path'])): ?>
|
||||
<button type="submit" form="delete-logo-form" class="btn btn-danger btn-sm">Löschen</button>
|
||||
<button type="submit" form="delete-logo-form"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-danger);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Logo löschen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="3,6 5,6 21,6"/>
|
||||
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
||||
<path d="M10 11v6M14 11v6"/>
|
||||
<path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>
|
||||
</svg>
|
||||
</button>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</form>
|
||||
|
|
|
|||
|
|
@ -27,10 +27,28 @@
|
|||
<td class="td-muted text-sm"><?= View::formatDate($s['created_at']) ?></td>
|
||||
<td>
|
||||
<div style="display:flex;gap:.5rem">
|
||||
<a href="/suppliers/<?= $h($s['id']) ?>/edit" class="btn btn-secondary btn-sm">Bearbeiten</a>
|
||||
<a href="/suppliers/<?= $h($s['id']) ?>/edit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Bearbeiten">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
||||
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
||||
</svg>
|
||||
</a>
|
||||
<form method="post" action="/suppliers/<?= $h($s['id']) ?>/delete" style="margin:0"
|
||||
data-confirm="Lieferant "<?= $h($s['name']) ?>" wirklich löschen?">
|
||||
<button type="submit" class="btn btn-danger btn-sm">Löschen</button>
|
||||
<button type="submit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-danger);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Löschen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="3,6 5,6 21,6"/>
|
||||
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
||||
<path d="M10 11v6M14 11v6"/>
|
||||
<path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</form>
|
||||
</div>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -65,7 +65,16 @@
|
|||
<td class="td-muted text-sm"><?= $h($s['submitted_at'] ?? '–') ?></td>
|
||||
<td>
|
||||
<div style="display:flex;gap:.4rem">
|
||||
<a href="/tax/ustva/<?= $h($s['year']) ?>/<?= $h($s['month']) ?>" class="btn btn-secondary btn-sm">Ansehen</a>
|
||||
<a href="/tax/ustva/<?= $h($s['year']) ?>/<?= $h($s['month']) ?>"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Ansehen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<rect x="2" y="4" width="20" height="16" rx="2"/>
|
||||
<path d="M5 12s2.5-4 7-4 7 4 7 4-2.5 4-7 4-7-4-7-4z"/>
|
||||
<circle cx="12" cy="12" r="1.5"/>
|
||||
</svg>
|
||||
</a>
|
||||
<a href="/tax/ustva/<?= $h($s['year']) ?>/<?= $h($s['month']) ?>/xml" class="btn btn-secondary btn-sm">XML</a>
|
||||
</div>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -68,9 +68,15 @@ $editId = $formData['edit_id'] ?? null;
|
|||
</td>
|
||||
<td><?= $h(View::formatDate(substr($u['created_at'], 0, 10))) ?></td>
|
||||
<td style="text-align:right">
|
||||
<button type="button" class="btn btn-sm btn-secondary"
|
||||
<button type="button"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-muted);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Bearbeiten"
|
||||
onclick="editUser(<?= (int)$u['id'] ?>, <?= $h(json_encode($u['username'])) ?>)">
|
||||
Bearbeiten
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"/>
|
||||
<path d="M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z"/>
|
||||
</svg>
|
||||
</button>
|
||||
<form method="POST" action="/useradmin/<?= (int)$u['id'] ?>/toggle" style="display:inline;">
|
||||
<button type="submit" class="btn btn-sm <?= $u['active'] ? 'btn-secondary' : 'btn-primary' ?>">
|
||||
|
|
@ -79,7 +85,17 @@ $editId = $formData['edit_id'] ?? null;
|
|||
</form>
|
||||
<form method="POST" action="/useradmin/<?= (int)$u['id'] ?>/delete" style="display:inline;"
|
||||
onsubmit="return confirm('Benutzer «<?= $h($u['username']) ?>» wirklich löschen?')">
|
||||
<button type="submit" class="btn btn-sm btn-danger">Löschen</button>
|
||||
<button type="submit"
|
||||
style="background:none;border:none;cursor:pointer;color:var(--color-danger);padding:.2rem;line-height:1;display:inline-flex;align-items:center"
|
||||
title="Löschen">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24"
|
||||
fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||
<polyline points="3,6 5,6 21,6"/>
|
||||
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
||||
<path d="M10 11v6M14 11v6"/>
|
||||
<path d="M9 6V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v2"/>
|
||||
</svg>
|
||||
</button>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue