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:
Sven committed 2026-10-20 11:19:43 +02:00
1 parent 363bc27c26
commit 781a2b82dc
1165 files changed
+74986 -1028

No files matched your search

@@ -0,0 +1,23 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import {courierDetailColumns,statisticsDetailValue} from '../src/statisticsCourierDetails.mjs';
import {statisticsAmountColumns} from '../src/statisticsAmountColumns.mjs';
test('courier master fees are visible in all values and never enter aggregate amount columns',()=>{
const result={courierDetails:true,displayMetric:'ALL',gross:true};
assert.deepEqual(courierDetailColumns(result).map(([key])=>key),['courierCompany','systemFee','advertisingAllowance','courierDetailsNotice']);
assert.ok(statisticsAmountColumns(result).every(c=>!['systemFee','advertisingAllowance'].includes(c.key)));
assert.deepEqual(courierDetailColumns({...result,displayMetric:'revenue'}),[['courierCompany','Firma UN']]);
assert.deepEqual(courierDetailColumns({...result,calculation:true}),[['courierCompany','Firma UN']]);
});
test('customer and pickup reports do not expose vehicle fees',()=>{
assert.deepEqual(courierDetailColumns({}),[]);
assert.deepEqual(courierDetailColumns({courierDetails:true,pickup:true}),[]);
assert.deepEqual(courierDetailColumns({courierDetails:true,pickupTimes:true}),[]);
});
test('zero master values stay zero and unknown values stay unknown',()=>{
assert.match(statisticsDetailValue({systemFee:0},'systemFee'),/^0,00\s€$/);
assert.match(statisticsDetailValue({advertisingAllowance:12.5},'advertisingAllowance'),/^12,50\s€$/);
assert.equal(statisticsDetailValue({systemFee:null},'systemFee'),'–');
assert.equal(statisticsDetailValue({courierCompany:'Beispiel & Partner'},'courierCompany'),'Beispiel & Partner');
});