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">
|
||||
<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>
|
||||
Erweitert (Altmodus und Korrektur)
|
||||
Erweitert (Verbrauch korrigieren)
|
||||
</summary>
|
||||
<p class="adv-hint">
|
||||
Die beiden USD-Felder gehören zum alten Abrechnungsmodus (BILLING_MODE=actual)
|
||||
und haben im heutigen Pauschalmodus keine Wirkung auf den Kunden. Das
|
||||
Korrektur-Feld überschreibt den Verbrauch der laufenden Periode direkt,
|
||||
nur für bewusste Eingriffe gedacht.
|
||||
Das Korrektur-Feld überschreibt den Verbrauchszähler der laufenden
|
||||
Periode direkt, der Kunde sieht die Änderung sofort. Nur für bewusste
|
||||
Eingriffe gedacht, z.B. Kulanz oder das Bereinigen von Fehlbuchungen.
|
||||
</p>
|
||||
<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">
|
||||
<label for="editCreditsUsed">Verbrauch korrigieren (Credits, laufende Periode)</label>
|
||||
<input type="number" id="editCreditsUsed" step="0.01" placeholder="Aktueller Verbrauch">
|
||||
@@ -621,10 +612,6 @@
|
||||
<label for="newOrgLicWarnPercent">Warnschwelle (%, 0 = aus)</label>
|
||||
<input type="number" id="newOrgLicWarnPercent" value="80" min="0" max="100">
|
||||
</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 id="newOrgError" class="error-msg" style="display:none"></div>
|
||||
</div>
|
||||
@@ -720,14 +707,6 @@
|
||||
<label for="newLicWarnPercent">Warnschwelle (%, 0 = aus)</label>
|
||||
<input type="number" id="newLicWarnPercent" value="80" min="0" max="100">
|
||||
</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>
|
||||
<div class="modal-footer">
|
||||
@@ -1155,7 +1134,7 @@
|
||||
</div>
|
||||
|
||||
<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/x-scraper.js?v=20260522a"></script>
|
||||
<script src="/static/js/source-health.js?v=20260509l"></script>
|
||||
|
||||
@@ -680,9 +680,7 @@ function setupForms() {
|
||||
}
|
||||
if (!lic.unlimited_budget) {
|
||||
const ct = document.getElementById("newOrgLicCreditsTotal");
|
||||
const cpc = document.getElementById("newOrgLicCostPerCredit");
|
||||
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");
|
||||
if (warn && warn.value) lic.budget_warning_percent = parseInt(warn.value);
|
||||
@@ -764,11 +762,7 @@ function setupForms() {
|
||||
body.credits_rollover = !!document.getElementById('newLicRollover').checked;
|
||||
if (!body.unlimited_budget) {
|
||||
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 (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');
|
||||
if (warnEl && warnEl.value) body.budget_warning_percent = parseInt(warnEl.value);
|
||||
@@ -1130,8 +1124,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('editCostPerCredit', budget.cost_per_credit);
|
||||
el('editBudgetUsd', budget.token_budget_usd);
|
||||
el('editCreditsUsed', budget.credits_used ? Math.round(budget.credits_used) : 0);
|
||||
el('editWarnPercent', budget.budget_warning_percent);
|
||||
const periodSel = document.getElementById('editCreditsPeriod');
|
||||
@@ -1151,7 +1143,7 @@ function fillBudgetForm(budget) {
|
||||
function onUnlimitedToggle() {
|
||||
const cb = document.getElementById('editUnlimitedBudget');
|
||||
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);
|
||||
if (e) {
|
||||
e.disabled = isUnlimited;
|
||||
@@ -1175,7 +1167,7 @@ function onEditPeriodChange() {
|
||||
function onNewLicUnlimitedToggle() {
|
||||
const cb = document.getElementById('newLicUnlimited');
|
||||
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);
|
||||
if (e) {
|
||||
e.disabled = isUnlimited;
|
||||
@@ -1212,7 +1204,7 @@ function onNewOrgLicTypeChange() {
|
||||
function onNewOrgLicUnlimitedToggle() {
|
||||
const cb = document.getElementById('newOrgLicUnlimited');
|
||||
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);
|
||||
if (e) {
|
||||
e.disabled = isUnlimited;
|
||||
@@ -1290,14 +1282,10 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
body.unlimited_budget = isUnlimited;
|
||||
|
||||
var creditsTotal = document.getElementById('editCreditsTotal');
|
||||
var costPerCredit = document.getElementById('editCostPerCredit');
|
||||
var budgetUsd = document.getElementById('editBudgetUsd');
|
||||
var creditsUsed = document.getElementById('editCreditsUsed');
|
||||
|
||||
if (!isUnlimited) {
|
||||
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),
|
||||
// sonst laesst sich der Uebertrag nie abschalten und die Periode nie
|
||||
// zurueckstellen. Laufzeitfelder (credits_carried, credits_period_start,
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren