9 '/dbxapp/?dbx_modul=myInvoices&dbx_run1=report';
15if (!defined(
'dbxSystem')) {
16 define(
'dbxSystem',
'dbxWebApp');
18if (!defined(
'dbxRunAsAdmin')) {
19 define(
'dbxRunAsAdmin', 1);
22require
$base .
'/dbx/vendor/autoload.php';
23require_once
$base .
'/dbx/include/dbxKernel.php';
25$fail =
function (
string $message,
int $code): void {
26 fwrite(STDERR,
"FAIL: $message\n");
30dbx()->set_system_var(
'dbx_activ_modul',
'myInvoices');
31dbx()->set_system_var(
'dbx_master_modul',
'myInvoices');
32dbx()->set_system_var(
'dbx_activ_modul_id', 1);
33dbx()->set_system_var(
'dbx_activ_action',
'report');
34dbx()->set_modul_var(
'dbx_modul',
'myInvoices');
35dbx()->set_modul_var(
'dbx_run1',
'report');
44 'Installation fehlgeschlagen: '
56 array(
'invoice_no' =>
'DBX-DEMO-1001')
60 $fail(
'Demo-Rechnung fehlt.', 2);
69 if ((
string)(
$demo[$systemField] ??
'') ===
'') {
71 'Automatisches dbxDB-Systemfeld fehlt: ' . $systemField,
85 $fail(
'Demo-Positionen sind nicht vollständig.', 4);
91 (
float)$item[
'quantity']
92 * (
float)$item[
'unit_price']
97 || (
int)round((
float)
$demo[
'total_gross'] * 100) !== 4730
99 $fail(
'Snapshot und Positionssumme weichen ab.', 5);
109 'Positionen zu Rechnung DBX-DEMO-1001',
113 'Endsumme der Positionen',
118 .
' | HTML: ' . substr(
131 'Endsumme der angezeigten Rechnungen',
132 '[modul=myInvoices]dbx_run1=positions&invoice_id=',
143 '?dbx_modul=myInvoices&dbx_run1=delete&rid=' .
$demoId
150 || (
string)(
$deleteRoute[
'source'] ??
'') !==
'automatic'
151 || (
string)(
$deleteRoute[
'action'] ??
'') !==
'dbxAction.delete'
158 $fail(
'Zentrale Action-Policy akzeptiert gültige Route nicht.', 8);
162 '?dbx_modul=myInvoices&dbx_run1=delete&rid=' . (
$demoId + 1)
170 $fail(
'Zentrale Action-Policy bindet die Rechnungs-ID nicht.', 8);
173$testNo =
'DBX-TEST-' . date(
'YmdHis') .
'-' . random_int(1000, 9999);
176 'invoice_date' =>
'2026-07-20',
177 'customer' =>
'Transaktionstest',
179 'total_gross' =>
'10.00',
183 $fail(
'Temporäre Rechnung konnte nicht angelegt werden.', 9);
188 'article_no' =>
'TEST-ROLLBACK',
189 'description' =>
'Rollback-Position',
190 'quantity' =>
'1.00',
191 'unit_price' =>
'10.00',
195 $fail(
'Temporäre Position konnte nicht angelegt werden.', 10);
199 $fail(
'Rollback-Testtransaktion konnte nicht starten.', 11);
207 array(
'id' => -987654321)
211 $fail(
'Fehlerpfad der Löschtransaktion wurde nicht erreicht.', 12);
223 $fail(
'Rollback hat Kopf oder Position nicht wiederhergestellt.', 13);
238 'Rechnung und Positionen wurden gelöscht'
241 $fail(
'Gültige atomare Löschung ist fehlgeschlagen.', 14);
244echo
"OK myInvoices runtime, sums, central policy precondition and rollback\n";
parse_url($data)
Zerlegt URL-/Parameterdaten in einen Array.
check_action_token(string $scope='global', string $token='')
Prueft ein sessiongebundenes Aktions-Token.
$_SERVER['REQUEST_METHOD']
if( $inserted !==1) if($db->begin($invoiceDd) !==1) $firstDelete
if(!is_array($items)||count($items) !==2) $calculatedCents
if(! $tamperedRoute||dbx() ->check_action_token((string)($tamperedRoute['scope'] ?? ''), $deleteToken)) $testNo
if( $demoId<=0) foreach(array('create_date', 'create_uid', 'update_date', 'update_uid', 'owner',) as $systemField) $items
if(! $deleteRoute||(string)($deleteRoute['source'] ?? '') !=='automatic'||(string)($deleteRoute['action'] ?? '') !=='dbxAction.delete'||(string)($deleteRoute['bindings']['rid'] ?? '') !==(string) $demoId||!dbx() ->check_action_token((string)($deleteRoute['scope'] ?? ''), $deleteToken)) $tamperedRoute
foreach(array('Positionen zu Rechnung DBX-DEMO-1001', '39, 80 EUR', '7, 50 EUR', '47, 30 EUR', 'Endsumme der Positionen',) as $expected) $reportHtml
DBX schema administration.