Budget setting and all dollar to chf
All checks were successful
Build and Push / build (push) Successful in 1m33s

This commit is contained in:
2026-05-02 23:25:24 +02:00
parent 188bef2ece
commit 666dd64580
6 changed files with 65 additions and 23 deletions

View File

@@ -43,19 +43,6 @@ export default async function TenantDetailPage({
// the same page but with edit controls hidden / fields read-only. // the same page but with edit controls hidden / fields read-only.
const canEdit = canMutate(user); const canEdit = canMutate(user);
// TEMP DIAGNOSTIC for budget-card non-rendering. Logs the prop
// values that flow into UsageDisplay so we can see which one is
// turning the editable variant off. Remove once cause is found.
console.log(
"[tenant page] budget edit props",
JSON.stringify({
tenantName: name,
canEdit,
isPlatform: user.isPlatform,
roles: user.roles,
})
);
// Bug 31: customer-side cancel/resume control. Same gate as canEdit // Bug 31: customer-side cancel/resume control. Same gate as canEdit
// — only owners (or platform staff) may toggle the subscription. // — only owners (or platform staff) may toggle the subscription.
// The current state comes from spec.suspend on the CR. // The current state comes from spec.suspend on the CR.

View File

@@ -126,12 +126,7 @@ export function BudgetEditableCard({
<> <>
<button <button
type="button" type="button"
onClick={() => { onClick={() => setOpen(true)}
// Temporary debug aid — if clicks reach the handler we'll
// see this in the browser console. Remove once confirmed.
console.log("[BudgetEditableCard] open clicked");
setOpen(true);
}}
className="bg-surface-1 border border-accent/40 rounded-xl p-4 text-left hover:border-accent transition-colors cursor-pointer focus:outline-none focus:ring-2 focus:ring-accent/40 group block w-full" className="bg-surface-1 border border-accent/40 rounded-xl p-4 text-left hover:border-accent transition-colors cursor-pointer focus:outline-none focus:ring-2 focus:ring-accent/40 group block w-full"
> >
<div className="text-xs text-text-muted mb-1 flex items-center justify-between"> <div className="text-xs text-text-muted mb-1 flex items-center justify-between">

View File

@@ -189,7 +189,22 @@
"last30Days": "Letzte 30 Tage", "last30Days": "Letzte 30 Tage",
"noData": "Keine Nutzungsdaten verfügbar.", "noData": "Keine Nutzungsdaten verfügbar.",
"dailyBreakdown": "Tagesübersicht", "dailyBreakdown": "Tagesübersicht",
"requests": "Anfragen" "requests": "Anfragen",
"budgetEdit": "Bearbeiten",
"budgetEditTitle": "Budget festlegen",
"budgetEditDescription": "Begrenzen Sie, wie viel Ihre Assistenten ausgeben können, bevor Anfragen abgelehnt werden.",
"budgetOrgScopeWarning": "Dieses Budget gilt für alle Tenants Ihrer Organisation, nicht nur für diesen. Bei mehreren Tenants teilen sich diese das Limit.",
"budgetModeUnlimited": "Kein Limit",
"budgetModeUnlimitedDescription": "Beliebige Ausgaben, kein Limit.",
"budgetModeCapped": "Limit festlegen",
"budgetModeCappedDescription": "Anfragen ablehnen, sobald die Ausgaben diesen Betrag erreichen.",
"budgetAmount": "Betrag",
"budgetResetCadence": "Zurücksetzen",
"budgetCadence_30d": "Alle 30 Tage",
"budgetCadence_1mo": "Monatlich",
"budgetCadence_1y": "Jährlich",
"budgetInvalid": "Bitte einen positiven Betrag eingeben.",
"budgetSaveFailed": "Budget konnte nicht gespeichert werden. Bitte erneut versuchen."
}, },
"workspace": { "workspace": {
"save": "Speichern", "save": "Speichern",

View File

@@ -189,7 +189,22 @@
"last30Days": "Last 30 Days", "last30Days": "Last 30 Days",
"noData": "No usage data available.", "noData": "No usage data available.",
"dailyBreakdown": "Daily Breakdown", "dailyBreakdown": "Daily Breakdown",
"requests": "requests" "requests": "requests",
"budgetEdit": "Edit",
"budgetEditTitle": "Set spending budget",
"budgetEditDescription": "Cap how much your assistants can spend before requests start being declined.",
"budgetOrgScopeWarning": "This budget applies to all tenants in your organization, not just this one. If you have multiple tenants, they share the same cap.",
"budgetModeUnlimited": "No limit",
"budgetModeUnlimitedDescription": "Spend as much as needed; no cap.",
"budgetModeCapped": "Set a cap",
"budgetModeCappedDescription": "Stop accepting requests once spend reaches this amount.",
"budgetAmount": "Amount",
"budgetResetCadence": "Reset",
"budgetCadence_30d": "Every 30 days",
"budgetCadence_1mo": "Monthly",
"budgetCadence_1y": "Yearly",
"budgetInvalid": "Please enter a positive amount.",
"budgetSaveFailed": "Could not save budget. Please try again."
}, },
"workspace": { "workspace": {
"save": "Save", "save": "Save",

View File

@@ -189,7 +189,22 @@
"last30Days": "30 derniers jours", "last30Days": "30 derniers jours",
"noData": "Aucune donnée d'utilisation disponible.", "noData": "Aucune donnée d'utilisation disponible.",
"dailyBreakdown": "Détail journalier", "dailyBreakdown": "Détail journalier",
"requests": "requêtes" "requests": "requêtes",
"budgetEdit": "Modifier",
"budgetEditTitle": "Définir un budget",
"budgetEditDescription": "Limitez la dépense de vos assistants avant que les requêtes ne soient refusées.",
"budgetOrgScopeWarning": "Ce budget s'applique à tous les locataires de votre organisation, pas seulement à celui-ci. Si vous avez plusieurs locataires, ils partagent le même plafond.",
"budgetModeUnlimited": "Aucune limite",
"budgetModeUnlimitedDescription": "Dépense libre, sans plafond.",
"budgetModeCapped": "Définir un plafond",
"budgetModeCappedDescription": "Refuser les requêtes une fois ce montant atteint.",
"budgetAmount": "Montant",
"budgetResetCadence": "Réinitialisation",
"budgetCadence_30d": "Tous les 30 jours",
"budgetCadence_1mo": "Mensuelle",
"budgetCadence_1y": "Annuelle",
"budgetInvalid": "Veuillez saisir un montant positif.",
"budgetSaveFailed": "Impossible d'enregistrer le budget. Veuillez réessayer."
}, },
"workspace": { "workspace": {
"save": "Enregistrer", "save": "Enregistrer",

View File

@@ -189,7 +189,22 @@
"last30Days": "Ultimi 30 giorni", "last30Days": "Ultimi 30 giorni",
"noData": "Nessun dato di utilizzo disponibile.", "noData": "Nessun dato di utilizzo disponibile.",
"dailyBreakdown": "Dettaglio giornaliero", "dailyBreakdown": "Dettaglio giornaliero",
"requests": "richieste" "requests": "richieste",
"budgetEdit": "Modifica",
"budgetEditTitle": "Imposta budget",
"budgetEditDescription": "Limita quanto i tuoi assistenti possono spendere prima che le richieste vengano rifiutate.",
"budgetOrgScopeWarning": "Questo budget si applica a tutti i tenant della tua organizzazione, non solo a questo. Se hai più tenant, condividono lo stesso limite.",
"budgetModeUnlimited": "Nessun limite",
"budgetModeUnlimitedDescription": "Spesa libera, nessun tetto.",
"budgetModeCapped": "Imposta un tetto",
"budgetModeCappedDescription": "Rifiuta le richieste una volta raggiunto questo importo.",
"budgetAmount": "Importo",
"budgetResetCadence": "Ripristino",
"budgetCadence_30d": "Ogni 30 giorni",
"budgetCadence_1mo": "Mensile",
"budgetCadence_1y": "Annuale",
"budgetInvalid": "Inserisci un importo positivo.",
"budgetSaveFailed": "Impossibile salvare il budget. Riprova."
}, },
"workspace": { "workspace": {
"save": "Salva", "save": "Salva",