feat(org-detail): Verbrauchs-Korrektur direkt an der Kachel, Zahlenfelder ohne Pfeile
Die Korrektur des Verbrauchszählers sitzt jetzt direkt an der Kachel "Verbrauchte Credits", wo man den Zähler sieht, als Eingabefeld mit Korrigieren-Knopf und Sicherheitsrückfrage. Das Feld im Kontingent- Formular entfällt dafür. Außerdem sind die Hochzähl-Pfeile an allen Zahlenfeldern des Portals entfernt. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -386,6 +386,37 @@ function setOrgLanguage(wert) {
|
||||
_saveOrgSetting({ output_language: wert }, "Pipeline-Sprache gespeichert");
|
||||
}
|
||||
|
||||
// Verbrauchszähler direkt an der Kachel korrigieren (Kulanz, Fehlbereinigung)
|
||||
async function korrigiereVerbrauch() {
|
||||
const input = document.getElementById("korrCreditsUsed");
|
||||
if (!input || input.value === "") {
|
||||
showToast("Bitte den neuen Zählerstand eintragen", "error");
|
||||
return;
|
||||
}
|
||||
const n = parseFloat(input.value);
|
||||
if (isNaN(n) || n < 0) {
|
||||
showToast("Der Zählerstand muss 0 oder größer sein", "error");
|
||||
return;
|
||||
}
|
||||
showConfirm(
|
||||
"Verbrauch korrigieren",
|
||||
"Verbrauchszähler dieser Organisation auf " + n.toLocaleString("de-DE") + " Credits setzen? Der Kunde sieht die Änderung sofort.",
|
||||
async () => {
|
||||
try {
|
||||
const licenses = await API.get("/api/licenses?org_id=" + currentOrgId);
|
||||
const aktiv = licenses.find(l => l.status === "active");
|
||||
if (!aktiv) { showToast("Keine aktive Lizenz gefunden", "error"); return; }
|
||||
await API.put("/api/token-usage/budget/" + aktiv.id, { credits_used: n });
|
||||
input.value = "";
|
||||
showToast("Verbrauchszähler gesetzt", "success");
|
||||
loadOrgTokenUsage(currentOrgId);
|
||||
} catch (err) {
|
||||
showToast(err.message, "error");
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
// Max Nutzer der aktiven Lizenz direkt in der Tabelle ändern
|
||||
async function setLicenseMaxUsers(licId, wert) {
|
||||
const n = parseInt(wert, 10);
|
||||
@@ -1124,7 +1155,6 @@ async function loadOrgTokenUsage(orgId) {
|
||||
function fillBudgetForm(budget) {
|
||||
const el = (id, val) => { const e = document.getElementById(id); if (e && val != null) e.value = val; };
|
||||
el('editCreditsTotal', budget.credits_total);
|
||||
el('editCreditsUsed', budget.credits_used ? Math.round(budget.credits_used) : 0);
|
||||
el('editWarnPercent', budget.budget_warning_percent);
|
||||
const periodSel = document.getElementById('editCreditsPeriod');
|
||||
if (periodSel) periodSel.value = budget.credits_period || 'monthly';
|
||||
@@ -1282,7 +1312,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
body.unlimited_budget = isUnlimited;
|
||||
|
||||
var creditsTotal = document.getElementById('editCreditsTotal');
|
||||
var creditsUsed = document.getElementById('editCreditsUsed');
|
||||
|
||||
if (!isUnlimited) {
|
||||
if (creditsTotal && creditsTotal.value) body.credits_total = parseInt(creditsTotal.value);
|
||||
@@ -1295,8 +1324,6 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
var warnPercent = document.getElementById('editWarnPercent');
|
||||
if (warnPercent && warnPercent.value) body.budget_warning_percent = parseInt(warnPercent.value);
|
||||
}
|
||||
// credits_used immer mitsenden (auch im Unlimited-Modus, fuer Korrekturen)
|
||||
if (creditsUsed && creditsUsed.value !== '') body.credits_used = parseFloat(creditsUsed.value);
|
||||
|
||||
var result = await API.put('/api/token-usage/budget/' + activeLic.id, body);
|
||||
if (msgEl) {
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren