Finanzen: Reiter Rechnungen am Kunden nur fuer Admins, Badge Adresse unvollstaendig
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2aacdb2d56
commit
edf118a044
4 files changed
+63
-15
No files matched your search
@@ -0,0 +1,19 @@
|
||||
// Reiter der Kundenansicht (rein, ohne React; unter Node testbar). „Rechnungen“ ruft die Finanzen-API des Portals auf,
|
||||
// die nur Admins freigibt: für alle anderen gibt es den Reiter nicht.
|
||||
|
||||
const BASE_TABS = [
|
||||
{ id: 'overview', label: 'Uebersicht' },
|
||||
{ id: 'tickets', label: 'Tickets' },
|
||||
{ id: 'invoices', label: 'Rechnungen', adminOnly: true },
|
||||
{ id: 'projects', label: 'Projekte' },
|
||||
]
|
||||
|
||||
/** Reiter für Tabs: [{ id, label }]; „Rechnungen“ nur für Admins. */
|
||||
export function customerTabs(isAdmin) {
|
||||
return BASE_TABS.filter((t) => !t.adminOnly || isAdmin === true).map(({ id, label }) => ({ id, label }))
|
||||
}
|
||||
|
||||
/** Der Reiter, der tatsächlich gezeigt wird: ein nicht (mehr) erlaubter oder unbekannter Reiter fällt auf „Übersicht“ zurück. */
|
||||
export function resolveCustomerTab(tab, isAdmin) {
|
||||
return customerTabs(isAdmin).some((t) => t.id === tab) ? tab : 'overview'
|
||||
}
|
||||
@@ -748,7 +748,7 @@ export function resolveCustomerText(options, input) {
|
||||
|
||||
/**
|
||||
* Reiter „Rechnungen“ am Kunden: { ok: true } oder { ok: false, title, hint } (Grund nach canInvoice plus ein Satz,
|
||||
* was zu tun ist). Der Reiter ist für jeden Kunden sichtbar; ohne ok zeigt er statt der Liste diesen Hinweis.
|
||||
* was zu tun ist). Der Reiter ist für Admins bei jedem Kunden sichtbar; ohne ok zeigt er statt der Liste diesen Hinweis.
|
||||
*/
|
||||
export function customerInvoicesGate(customer) {
|
||||
const check = canInvoice(customer)
|
||||
@@ -776,7 +776,7 @@ export function customerInvoicesGate(customer) {
|
||||
|
||||
// --- Buchungen (Block 7) -----------------------------------------------------------------------------------
|
||||
|
||||
const RANK ={ hoch: 0, mittel: 1, niedrig: 2 }
|
||||
const RANK = { hoch: 0, mittel: 1, niedrig: 2 }
|
||||
const dayOf = (tx) => text(tx.bookingDate) || text(tx.valueDate)
|
||||
|
||||
/** Buchungen neueste zuerst (Buchungsdatum, sonst Wertstellung); gleiche Tage behalten die Reihenfolge des Servers. */
|
||||
|
||||
Reference in new issue
Block a user