feat(org-detail): Altmodus-Felder aus allen Formularen entfernt
Kosten pro Credit (USD) und Budget-Limit (USD) gehörten zum abgeschalteten Altmodus (BILLING_MODE=actual) und sind aus dem Kontingent-Formular, dem Lizenz-Modal und der Org-Anlage entfernt. Der Erweitert-Bereich heißt jetzt "Verbrauch korrigieren" und enthält nur noch das Eingriffsfeld für den Verbrauchszähler. Die DB-Spalten, die API-Felder und der Rückfallmodus im Monitor bleiben unangetastet, falls der Altmodus je reaktiviert wird, setzt man die Werte per API. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dieser Commit ist enthalten in:
@@ -262,23 +262,14 @@
|
|||||||
<details class="adv-section">
|
<details class="adv-section">
|
||||||
<summary>
|
<summary>
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polyline points="9 18 15 12 9 6"/></svg>
|
||||||
Erweitert (Altmodus und Korrektur)
|
Erweitert (Verbrauch korrigieren)
|
||||||
</summary>
|
</summary>
|
||||||
<p class="adv-hint">
|
<p class="adv-hint">
|
||||||
Die beiden USD-Felder gehören zum alten Abrechnungsmodus (BILLING_MODE=actual)
|
Das Korrektur-Feld überschreibt den Verbrauchszähler der laufenden
|
||||||
und haben im heutigen Pauschalmodus keine Wirkung auf den Kunden. Das
|
Periode direkt, der Kunde sieht die Änderung sofort. Nur für bewusste
|
||||||
Korrektur-Feld überschreibt den Verbrauch der laufenden Periode direkt,
|
Eingriffe gedacht, z.B. Kulanz oder das Bereinigen von Fehlbuchungen.
|
||||||
nur für bewusste Eingriffe gedacht.
|
|
||||||
</p>
|
</p>
|
||||||
<div class="adv-grid" style="margin-top:10px;">
|
<div class="adv-grid" style="margin-top:10px;">
|
||||||
<div class="form-group">
|
|
||||||
<label for="editCostPerCredit">Kosten pro Credit (USD, nur Altmodus)</label>
|
|
||||||
<input type="number" id="editCostPerCredit" step="0.01" placeholder="0.20">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="editBudgetUsd">Budget-Limit (USD, nur Altmodus)</label>
|
|
||||||
<input type="number" id="editBudgetUsd" step="0.01" placeholder="z.B. 2000">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label for="editCreditsUsed">Verbrauch korrigieren (Credits, laufende Periode)</label>
|
<label for="editCreditsUsed">Verbrauch korrigieren (Credits, laufende Periode)</label>
|
||||||
<input type="number" id="editCreditsUsed" step="0.01" placeholder="Aktueller Verbrauch">
|
<input type="number" id="editCreditsUsed" step="0.01" placeholder="Aktueller Verbrauch">
|
||||||
@@ -621,10 +612,6 @@
|
|||||||
<label for="newOrgLicWarnPercent">Warnschwelle (%, 0 = aus)</label>
|
<label for="newOrgLicWarnPercent">Warnschwelle (%, 0 = aus)</label>
|
||||||
<input type="number" id="newOrgLicWarnPercent" value="80" min="0" max="100">
|
<input type="number" id="newOrgLicWarnPercent" value="80" min="0" max="100">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
|
||||||
<label for="newOrgLicCostPerCredit">Kosten pro Credit (USD)</label>
|
|
||||||
<input type="number" id="newOrgLicCostPerCredit" step="0.01" value="0.20" placeholder="0.20">
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
<div id="newOrgError" class="error-msg" style="display:none"></div>
|
<div id="newOrgError" class="error-msg" style="display:none"></div>
|
||||||
</div>
|
</div>
|
||||||
@@ -720,14 +707,6 @@
|
|||||||
<label for="newLicWarnPercent">Warnschwelle (%, 0 = aus)</label>
|
<label for="newLicWarnPercent">Warnschwelle (%, 0 = aus)</label>
|
||||||
<input type="number" id="newLicWarnPercent" value="80" min="0" max="100">
|
<input type="number" id="newLicWarnPercent" value="80" min="0" max="100">
|
||||||
</div>
|
</div>
|
||||||
<div class="form-group">
|
|
||||||
<label for="newLicCostPerCredit">Kosten pro Credit (USD)</label>
|
|
||||||
<input type="number" id="newLicCostPerCredit" step="0.01" placeholder="0.20">
|
|
||||||
</div>
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="newLicBudgetUsd">Budget-Limit (USD)</label>
|
|
||||||
<input type="number" id="newLicBudgetUsd" step="0.01" placeholder="z.B. 2000">
|
|
||||||
</div>
|
|
||||||
<div id="newLicError" class="error-msg" style="display:none"></div>
|
<div id="newLicError" class="error-msg" style="display:none"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
@@ -1155,7 +1134,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script src="/static/js/a11y.js?v=20260725a"></script>
|
<script src="/static/js/a11y.js?v=20260725a"></script>
|
||||||
<script src="/static/js/app.js?v=20260725k"></script>
|
<script src="/static/js/app.js?v=20260725l"></script>
|
||||||
<script src="/static/js/sources.js?v=20260522x2"></script>
|
<script src="/static/js/sources.js?v=20260522x2"></script>
|
||||||
<script src="/static/js/x-scraper.js?v=20260522a"></script>
|
<script src="/static/js/x-scraper.js?v=20260522a"></script>
|
||||||
<script src="/static/js/source-health.js?v=20260509l"></script>
|
<script src="/static/js/source-health.js?v=20260509l"></script>
|
||||||
|
|||||||
@@ -680,9 +680,7 @@ function setupForms() {
|
|||||||
}
|
}
|
||||||
if (!lic.unlimited_budget) {
|
if (!lic.unlimited_budget) {
|
||||||
const ct = document.getElementById("newOrgLicCreditsTotal");
|
const ct = document.getElementById("newOrgLicCreditsTotal");
|
||||||
const cpc = document.getElementById("newOrgLicCostPerCredit");
|
|
||||||
if (ct && ct.value) lic.credits_total = parseInt(ct.value);
|
if (ct && ct.value) lic.credits_total = parseInt(ct.value);
|
||||||
if (cpc && cpc.value) lic.cost_per_credit = parseFloat(cpc.value);
|
|
||||||
}
|
}
|
||||||
const warn = document.getElementById("newOrgLicWarnPercent");
|
const warn = document.getElementById("newOrgLicWarnPercent");
|
||||||
if (warn && warn.value) lic.budget_warning_percent = parseInt(warn.value);
|
if (warn && warn.value) lic.budget_warning_percent = parseInt(warn.value);
|
||||||
@@ -764,11 +762,7 @@ function setupForms() {
|
|||||||
body.credits_rollover = !!document.getElementById('newLicRollover').checked;
|
body.credits_rollover = !!document.getElementById('newLicRollover').checked;
|
||||||
if (!body.unlimited_budget) {
|
if (!body.unlimited_budget) {
|
||||||
const creditsTotal = document.getElementById('newLicCreditsTotal');
|
const creditsTotal = document.getElementById('newLicCreditsTotal');
|
||||||
const costPerCredit = document.getElementById('newLicCostPerCredit');
|
|
||||||
const budgetUsd = document.getElementById('newLicBudgetUsd');
|
|
||||||
if (creditsTotal && creditsTotal.value) body.credits_total = parseInt(creditsTotal.value);
|
if (creditsTotal && creditsTotal.value) body.credits_total = parseInt(creditsTotal.value);
|
||||||
if (costPerCredit && costPerCredit.value) body.cost_per_credit = parseFloat(costPerCredit.value);
|
|
||||||
if (budgetUsd && budgetUsd.value) body.token_budget_usd = parseFloat(budgetUsd.value);
|
|
||||||
}
|
}
|
||||||
const warnEl = document.getElementById('newLicWarnPercent');
|
const warnEl = document.getElementById('newLicWarnPercent');
|
||||||
if (warnEl && warnEl.value) body.budget_warning_percent = parseInt(warnEl.value);
|
if (warnEl && warnEl.value) body.budget_warning_percent = parseInt(warnEl.value);
|
||||||
@@ -1130,8 +1124,6 @@ async function loadOrgTokenUsage(orgId) {
|
|||||||
function fillBudgetForm(budget) {
|
function fillBudgetForm(budget) {
|
||||||
const el = (id, val) => { const e = document.getElementById(id); if (e && val != null) e.value = val; };
|
const el = (id, val) => { const e = document.getElementById(id); if (e && val != null) e.value = val; };
|
||||||
el('editCreditsTotal', budget.credits_total);
|
el('editCreditsTotal', budget.credits_total);
|
||||||
el('editCostPerCredit', budget.cost_per_credit);
|
|
||||||
el('editBudgetUsd', budget.token_budget_usd);
|
|
||||||
el('editCreditsUsed', budget.credits_used ? Math.round(budget.credits_used) : 0);
|
el('editCreditsUsed', budget.credits_used ? Math.round(budget.credits_used) : 0);
|
||||||
el('editWarnPercent', budget.budget_warning_percent);
|
el('editWarnPercent', budget.budget_warning_percent);
|
||||||
const periodSel = document.getElementById('editCreditsPeriod');
|
const periodSel = document.getElementById('editCreditsPeriod');
|
||||||
@@ -1151,7 +1143,7 @@ function fillBudgetForm(budget) {
|
|||||||
function onUnlimitedToggle() {
|
function onUnlimitedToggle() {
|
||||||
const cb = document.getElementById('editUnlimitedBudget');
|
const cb = document.getElementById('editUnlimitedBudget');
|
||||||
const isUnlimited = cb && cb.checked;
|
const isUnlimited = cb && cb.checked;
|
||||||
['editCreditsTotal','editCostPerCredit','editBudgetUsd','editCreditsPeriod','editCreditsRollover','editWarnPercent'].forEach(function(id) {
|
['editCreditsTotal','editCreditsPeriod','editCreditsRollover','editWarnPercent'].forEach(function(id) {
|
||||||
const e = document.getElementById(id);
|
const e = document.getElementById(id);
|
||||||
if (e) {
|
if (e) {
|
||||||
e.disabled = isUnlimited;
|
e.disabled = isUnlimited;
|
||||||
@@ -1175,7 +1167,7 @@ function onEditPeriodChange() {
|
|||||||
function onNewLicUnlimitedToggle() {
|
function onNewLicUnlimitedToggle() {
|
||||||
const cb = document.getElementById('newLicUnlimited');
|
const cb = document.getElementById('newLicUnlimited');
|
||||||
const isUnlimited = cb && cb.checked;
|
const isUnlimited = cb && cb.checked;
|
||||||
['newLicCreditsTotal','newLicCostPerCredit','newLicBudgetUsd','newLicCreditsPeriod','newLicRollover','newLicWarnPercent'].forEach(function(id) {
|
['newLicCreditsTotal','newLicCreditsPeriod','newLicRollover','newLicWarnPercent'].forEach(function(id) {
|
||||||
const e = document.getElementById(id);
|
const e = document.getElementById(id);
|
||||||
if (e) {
|
if (e) {
|
||||||
e.disabled = isUnlimited;
|
e.disabled = isUnlimited;
|
||||||
@@ -1212,7 +1204,7 @@ function onNewOrgLicTypeChange() {
|
|||||||
function onNewOrgLicUnlimitedToggle() {
|
function onNewOrgLicUnlimitedToggle() {
|
||||||
const cb = document.getElementById('newOrgLicUnlimited');
|
const cb = document.getElementById('newOrgLicUnlimited');
|
||||||
const isUnlimited = cb && cb.checked;
|
const isUnlimited = cb && cb.checked;
|
||||||
['newOrgLicCreditsTotal','newOrgLicCostPerCredit','newOrgLicCreditsPeriod','newOrgLicRollover','newOrgLicWarnPercent'].forEach(function(id) {
|
['newOrgLicCreditsTotal','newOrgLicCreditsPeriod','newOrgLicRollover','newOrgLicWarnPercent'].forEach(function(id) {
|
||||||
const e = document.getElementById(id);
|
const e = document.getElementById(id);
|
||||||
if (e) {
|
if (e) {
|
||||||
e.disabled = isUnlimited;
|
e.disabled = isUnlimited;
|
||||||
@@ -1290,14 +1282,10 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
body.unlimited_budget = isUnlimited;
|
body.unlimited_budget = isUnlimited;
|
||||||
|
|
||||||
var creditsTotal = document.getElementById('editCreditsTotal');
|
var creditsTotal = document.getElementById('editCreditsTotal');
|
||||||
var costPerCredit = document.getElementById('editCostPerCredit');
|
|
||||||
var budgetUsd = document.getElementById('editBudgetUsd');
|
|
||||||
var creditsUsed = document.getElementById('editCreditsUsed');
|
var creditsUsed = document.getElementById('editCreditsUsed');
|
||||||
|
|
||||||
if (!isUnlimited) {
|
if (!isUnlimited) {
|
||||||
if (creditsTotal && creditsTotal.value) body.credits_total = parseInt(creditsTotal.value);
|
if (creditsTotal && creditsTotal.value) body.credits_total = parseInt(creditsTotal.value);
|
||||||
if (costPerCredit && costPerCredit.value) body.cost_per_credit = parseFloat(costPerCredit.value);
|
|
||||||
if (budgetUsd && budgetUsd.value) body.token_budget_usd = parseFloat(budgetUsd.value);
|
|
||||||
// Periode und Uebertrag IMMER senden (nicht ueber das if-value-Muster),
|
// Periode und Uebertrag IMMER senden (nicht ueber das if-value-Muster),
|
||||||
// sonst laesst sich der Uebertrag nie abschalten und die Periode nie
|
// sonst laesst sich der Uebertrag nie abschalten und die Periode nie
|
||||||
// zurueckstellen. Laufzeitfelder (credits_carried, credits_period_start,
|
// zurueckstellen. Laufzeitfelder (credits_carried, credits_period_start,
|
||||||
|
|||||||
In neuem Issue referenzieren
Einen Benutzer sperren