Erweitere VoTiAn NG um Fachfunktionen und verbessere die Listenoberfläche
Ergänze Auftragsbearbeitung, Disposition, Stammdaten, Kunden- und Transporteurportale, Lagerverwaltung, Abrechnung, Exporte und Statistik. Füge Kontoeinstellungen, Mitteilungen, Automatikdienste und Betriebsstatus sowie die zugehörigen Tests und PHP-Abgleichsdokumentation hinzu. Vergrößere die persönlichen Auftragslisten auf einheitliche Höhen und richte Statusanzeigen sowie die Ranking-Vorschau-Steuerelemente bündig aus. Validierung: 44 Frontendtests und Produktionsbuild erfolgreich. Backend funktional unverändert gegenüber dem vollständigen Lauf mit 1.624 erfolgreichen und drei übersprungenen Tests. Layout im Browser und lokale Bereitstellung geprüft.
This commit is contained in:
1 parent
363bc27c26
commit
781a2b82dc
1165 files changed
+74986
-1028
No files matched your search
@@ -0,0 +1,4 @@
|
||||
import test from 'node:test';import assert from 'node:assert/strict';import {customerHistorySeries} from '../src/customerHistory.mjs';
|
||||
test('empty and all-zero periods have finite chart coordinates',()=>{for(const rows of [[],[{month:'2026-01',amount:0,orders:0}]]){const s=customerHistorySeries(rows,'amount');assert.equal(s.zero,170);assert.ok(s.points.every(p=>Number.isFinite(p.x)&&Number.isFinite(p.y)));}});
|
||||
test('credits plot below zero and amounts are not clamped',()=>{const s=customerHistorySeries([{month:'2025-12',amount:-50,orders:1},{month:'2026-01',amount:100,orders:2}],'amount');assert.deepEqual(s.points.map(p=>p.value),[-50,100]);assert.ok(s.points[0].y>s.zero&&s.points[1].y<s.zero);assert.deepEqual(s.points.map(p=>p.x),[40,700]);});
|
||||
test('order counts use their own scale and invalid values are rejected',()=>{const s=customerHistorySeries([{month:'2026-01',amount:10000,orders:3}],'orders');assert.equal(s.max,3);assert.equal(s.points[0].y,25);assert.throws(()=>customerHistorySeries([{month:'x',amount:NaN,orders:1}],'amount'),/Monatswert/);});
|
||||
Reference in new issue
Block a user