Promote develop → main (2026-07-25 22:22 UTC) #16

Zusammengeführt
IntelSight_Admin hat 41 Commits von develop nach main 2026-07-26 00:22:10 +02:00 zusammengeführt
2 geänderte Dateien mit 8 neuen und 41 gelöschten Zeilen
Nur Änderungen aus Commit e302261314 werden angezeigt - Alle Commits anzeigen

Datei anzeigen

@@ -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>

Datei anzeigen

@@ -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,