Umstellung auf neue (anonyme) API
Bernd Wurst

Bernd Wurst commited on 2025-11-09 07:03:45
Zeige 7 geänderte Dateien mit 63 Einfügungen und 282 Löschungen.

... ...
@@ -15,7 +15,9 @@ $kunde = [];
15 15
 if (isset($_SESSION['lname']) && !isset($_SESSION['kundennr'])) {
16 16
     $kunde = suche_kunde($_SESSION['lname'], $_SESSION['phone']);
17 17
     if ($kunde) {
18
-        $_SESSION['kundennr'] = $kunde['id'];
18
+        $_SESSION['kundennr'] = $kunde['uuid'];
19
+        $_SESSION['phonenumbers'] = $kunde['phone'];
20
+        $_SESSION['emailaddrs'] = $kunde['email'];
19 21
         // Vorname in den Auftragsdaten
20 22
         if (!(isset($_SESSION['fname']) && $_SESSION['fname']) && isset($kunde['firstname']) && $kunde['firstname']) {
21 23
             $_SESSION['fname'] = $kunde['firstname'];
... ...
@@ -32,14 +34,14 @@ if (isset($_REQUEST['error'])) {
32 34
 
33 35
 
34 36
 $headline = 'Adresse eingeben';
35
-if (isset($_SESSION['kundennr']) && $_SESSION['kundennr'] && kunde_hat_adresse($_SESSION['kundennr'])) {
37
+if (isset($_SESSION['kundennr']) && $_SESSION['kundennr'] && isset($kunde['missing']) && !in_array('city', $kunde['missing'])) {
36 38
     $headline = 'Willkommen zurück!';
37 39
     $content .= '
38 40
         <p>Schön, wir kennen uns ja schon! Aus Datenschutzgründen wird Ihre Adresse hier nicht angezeigt. Sofern Sie Änderungen an Ihren Kundendaten wünschen, sprechen Sie uns bitte vor Ort darauf an.</p>';
39 41
     $content .= '
40 42
         <form class="form" action="save.php" method="post">
41 43
         <input type="hidden" name="form" value="address">';
42
-    if (!kunde_hat_email($_SESSION['kundennr'])) {
44
+    if (isset($kunde['missing']) && in_array('email', $kunde['missing'])) {
43 45
         $content .= '<p><strong>Dürfen wir Sie per E-Mail benachrichtigen?</strong><br>Wir kennen bisher noch keine E-Mail-Adresse von Ihnen. Wenn Sie uns eine E-Mail-Adresse angeben, können wir Sie auch per E-Mail über die Fertigstellung Ihres Auftrags benachrichtigen.</p>
44 46
         <div class="form-group form-group-lg row mb-3">
45 47
             <div class="col-sm-12"><input class="form-control" id="email" name="email" type="email" placeholder="E-Mail-Adresse" autocomplete="email"></div>
... ...
@@ -70,12 +72,11 @@ if (isset($_SESSION['kundennr']) && $_SESSION['kundennr'] && kunde_hat_adresse($
70 72
         "plz" => "PLZ",
71 73
         "ort" => "Ort");
72 74
     $placeholders = $fields;
73
-    $contents = $kunde;
75
+    $contents = [];
74 76
     foreach ($fields as $field => $label) {
75
-        if (isset($kunde[$field]) && $kunde[$field] == 'bekannt') {
76
-            $placeholders[$field] = $label.' wie beim letzten Besuch';
77
-            $contents[$field] = '';
78
-        } elseif (!isset($contents[$field])) {
77
+        if (isset($_SESSION[$field])) {
78
+            $contents[$field] = $_SESSION[$field];
79
+        } else {
79 80
             $contents[$field] = '';
80 81
         }
81 82
 
... ...
@@ -18,6 +18,9 @@ $(function () {
18 18
     $('#modal-frischsaft').on('shown.bs.modal', function () {
19 19
         // Setzt den Fokus auf das Eingabefeld mit der ID 'frischsaft'
20 20
         $('#frischsaft').focus();
21
+        if ($('#frischsaft').val() != '') {
22
+            $('#submit').prop('disabled', false);
23
+        }
21 24
     });
22 25
 
23 26
     $('#frischsaft').on('input', function () {
... ...
@@ -6,79 +6,6 @@ use GuzzleHttp\Psr7\Request;
6 6
 require_once("config.php");
7 7
 $base_url = $config['api_url'];
8 8
 
9
-$TOKEN_FILE = '../jwt-token.json';
10
-$jwt = [
11
-    "token" => null,
12
-    "refresh_token" => null,
13
-    "exp" => time()
14
-];
15
-
16
-if (file_exists($TOKEN_FILE)) {
17
-    $jwt = json_decode(file_get_contents($TOKEN_FILE), true);
18
-}
19
-
20
-if ($jwt['refresh_token'] && $jwt['exp'] < time()+5) {
21
-    // refresh token
22
-    $url = $base_url . 'token/refresh';
23
-    $data = ["refresh_token" => $jwt['refresh_token']];
24
-    $options = array(
25
-      'http' => array(
26
-        'method'  => 'POST',
27
-        'content' => json_encode( $data ),
28
-        'header'=>  "Content-Type: application/json\r\n" .
29
-                    "Accept: application/json\r\n"
30
-        )
31
-    );
32
-
33
-    $context = stream_context_create( $options );
34
-    $result = @file_get_contents( $url, false, $context );
35
-    if (!$result) {
36
-        print('Es gibt gerade ein technisches Problem.');
37
-        die();
38
-    }
39
-    $response = json_decode( $result, true);
40
-
41
-    $jwt['token'] = $response["token"];
42
-    $jwt['refresh_token'] = $response["refresh_token"];
43
-    $fields = explode('.', $jwt['token']);
44
-    $data = json_decode(base64_decode($fields[1]), true);
45
-    $jwt['exp'] = $data['exp'];
46
-}
47
-
48
-if (!$jwt['token'] || $jwt['exp'] < time()+5) {
49
-    // get new token
50
-    # init API
51
-    $url = $base_url . 'login';
52
-    $data = [
53
-        "username" => $config['api_username'],
54
-        "password" => $config['api_password']
55
-    ];
56
-    $options = array(
57
-      'http' => array(
58
-        'method'  => 'POST',
59
-        'content' => json_encode( $data ),
60
-        'header'=>  "Content-Type: application/json\r\n" .
61
-                    "Accept: application/json\r\n"
62
-        )
63
-    );
64
-
65
-    $context = stream_context_create( $options );
66
-    $result = @file_get_contents( $url, false, $context );
67
-    if (!$result) {
68
-        print('Es gibt gerade ein technisches Problem.');
69
-        die();
70
-    }
71
-    $response = json_decode( $result, true);
72
-
73
-    $jwt['token'] = $response["token"];
74
-    $jwt['refresh_token'] = $response["refresh_token"];
75
-    $fields = explode('.', $jwt['token']);
76
-    $data = json_decode(base64_decode($fields[1]), true);
77
-    $jwt['exp'] = $data['exp'];
78
-}
79
-
80
-file_put_contents($TOKEN_FILE, json_encode($jwt));
81
-
82 9
 
83 10
 function api_call($method, $url, $content = []) 
84 11
 {
... ...
@@ -89,8 +16,7 @@ function api_call($method, $url, $content = [])
89 16
 
90 17
     $headers = [
91 18
         "Content-Type" => "application/json",
92
-        "Accept" => "application/json",
93
-        "Authorization" => "Bearer ".$jwt['token']
19
+        "Accept" => "application/json"
94 20
         ];
95 21
     $body = json_encode( $content );
96 22
     $client = new Client(["http_errors" => false]);
... ...
@@ -2,162 +2,25 @@
2 2
 require_once('api.php');
3 3
 
4 4
 
5
-function phonetisch_reduzieren($word)
6
-{
7
-    $original = $word;
8
-    $word=strtolower($word);
9
-    $substitution=array(
10
-            "ä"=>"ae",
11
-            "ö"=>"oe",
12
-            "ü"=>"ue",
13
-            "ß"=>"ss",
14
-            "ph"=>"f",
15
-            "dr." => "",
16
-            "dr " => "",
17
-            "prof." => "",
18
-            "prof " => ""
19
-            );
20
-
21
-    foreach ($substitution as $letter=>$substitution) {
22
-        $word=str_replace($letter,$substitution,$word);
23
-    }
24
-    $result = trim($word);
25
-    return $result;
26
-}
27
-
28
-
29 5
 function suche_kunde($name, $number) {
30 6
         global $content;
31 7
         if (! $number) {
32 8
             return NULL;
33 9
         }
34
-        $ret = api_call('GET', 'customerContacts/search/'.format_number_api($number));
35
-        if ($ret['status_code'] >= 400) {
36
-            foreach ($ret['data']['validation_errors'] as $item) {
37
-                $_SESSION['warning'][] = $item['message'];
38
-            }
39
-            return null;
40
-        }
41
-        $ret = $ret['data'];
42
-        if (count($ret) > 0) {
43
-            $name = strtolower($name);
44
-            foreach ($ret as $item) {
45
-                $cust = $item['customer'];
46
-                if ((isset($cust['lastname']) && phonetisch_reduzieren($name) == phonetisch_reduzieren($cust['lastname'])) ||
47
-                    (isset($cust['firstname']) && phonetisch_reduzieren($name) == phonetisch_reduzieren($cust['firstname'])) ||
48
-                    (isset($cust['firstname']) && isset($cust['lastname']) && phonetisch_reduzieren($name) == phonetisch_reduzieren($cust['firstname'] .' '. $cust['lastname'])) ||
49
-                    (isset($cust['firstname']) && isset($cust['lastname']) && phonetisch_reduzieren($name) == phonetisch_reduzieren($cust['lastname'] .' '. $cust['firstname'])) ||
50
-                    (isset($cust['firstname']) && isset($cust['lastname']) && phonetisch_reduzieren($name) == phonetisch_reduzieren($cust['lastname'] .', '. $cust['firstname']))
51
-                    ) {
52
-                    return $cust;
53
-                }
54
-            }
55
-        }
56
-        return null;
57
-
58
-        /*
59
-        $kundenliste = json_decode(file_get_contents('../kunden.json'), TRUE);
60
-        foreach ($kundenliste as $k) {
61
-                foreach ($k['kontakt'] as $kon) {
62
-                        if ($kon['wert'] == $number) {
63
-                                return $k;
64
-                        }
65
-                }
66
-        }
67
-        */
68
-}
69
-
70
-function kunde_erste_kontakte($customerno) {
71
-    $ret = api_call('GET', 'customers/'.(int) $customerno);
72
-    if ($ret['status_code'] >= 400) {
73
-        // Fehler. Belästige den Kunden nicht damit
74
-        return [];
75
-    }
76
-    $ret = $ret['data'];
77
-    $kontakte = [];
78
-    if (isset($ret['phone']) && str_starts_with($ret['phone'], '+491')) {
79
-        $kontakte['mobil'] = $ret['phone'];
80
-    }
81
-    if (isset($ret['email']) && $ret['email']) {
82
-        $kontakte['email'] = $ret['email'];
83
-    }
84
-    foreach ($ret['contacts'] as $c) {
85
-        if (!isset($kontakte['mobil']) && isset($c['phone']) && str_starts_with($c['phone'], '+491')) {
86
-            $kontakte['mobil'] = $c['phone'];
87
-        }
88
-        if (!isset($kontakte['email']) && isset($c['email']) && $c['email']) {
89
-            $kontakte['email'] = $c['email'];
90
-        }
91
-    }
92
-    return $kontakte;
93
-}
94
-
95
-
96
-function kunde_hat_adresse($customerno) {
97
-    $ret = api_call('GET', 'customers/'.(int) $customerno);
98
-    if ($ret['status_code'] >= 400) {
99
-        // Fehler. Belästige den Kunden nicht damit
100
-        return true;
101
-    }
102
-    $ret = $ret['data'];
103
-    if (isset($ret['city']) && trim($ret['city']) != '') {
104
-        return true;
105
-    }
106
-    return false;
107
-}
108
-
109
-
110
-
111
-function kunde_hat_email($customerno) {
112
-    $ret = api_call('GET', 'customers/'.(int) $customerno);
113
-    if ($ret['status_code'] >= 400) {
114
-        // Fehler. Belästige den Kunden nicht damit
115
-        return true;
116
-    }
117
-    $ret = $ret['data'];
118
-    if (isset($ret['email']) && $ret['email']) {
119
-        return true;
120
-    }
121
-    foreach ($ret['contacts'] as $c) {
122
-        if (isset($c['email']) && $c['email']) {
123
-            return true;
124
-        }
125
-    }
126
-    return false;
127
-}
128
-
129
-
130
-
131
-function update_kunde($customerno, $daten) {
132
-    $ret = api_call('GET', 'customers/'.(int) $customerno);
133
-    if ($ret['status_code'] >= 400) {
134
-        // Fehler. Erstelle Neukunde
135
-        erstelle_kunde($daten);
136
-        return;
137
-    }
138
-    $customer = $ret['data'];
139
-
140
-    foreach ($daten as $field => $value) {
141
-        if ($value) {
142
-            $customer[$field] = $value;
143
-        }
144
-    }
10
+        $searchdata = array(
11
+            "name" => $name,
12
+            "phone" => $number
13
+        );
145 14
 
146
-    $filename = '../data/'.date('Y').'/'.time().'-kunde-'.$customerno.'.json';
147
-    @file_put_contents($filename, json_encode($customer));
148
-    $ret = api_call('PUT', 'customers/'.(int) $customerno, $customer);
149
-    if ($ret['status_code'] >= 400) {
150
-        foreach ($ret['data']['validation_errors'] as $item) {
151
-            $_SESSION['warnings'][] = $item['key'].': '.$item['message'];
152
-        }
15
+        $ret = api_call('POST', 'anonymous/identify', $searchdata);
16
+        if ($ret['status_code'] == 404) {
153 17
             return null;
154 18
         }
155
-    $ret = $ret['data'];
156
-    if (isset($ret['id'])) {
157
-        return $ret['id'];
158
-    } else {
19
+        if ($ret['status_code'] != 200) {
20
+            // Fehler
159 21
             return null;
160 22
         }
23
+        return $ret["data"];
161 24
 }
162 25
 
163 26
 
... ...
@@ -173,7 +36,7 @@ function erstelle_kunde($daten) {
173 36
         "contacts" => []];
174 37
     $filename = '../data/'.date('Y').'/'.time().'-neukunde.json';
175 38
     @file_put_contents($filename, json_encode($json));
176
-    $ret = api_call('POST', 'customers', $json);
39
+    $ret = api_call('POST', 'anonymous/newcustomer', $json);
177 40
     if ($ret['status_code'] >= 400) {
178 41
         foreach ($ret['data']['validation_errors'] as $item) {
179 42
             $_SESSION['warnings'][] = $item['key'].': '.$item['message'];
... ...
@@ -181,8 +44,8 @@ function erstelle_kunde($daten) {
181 44
         return null;
182 45
     }
183 46
     $ret = $ret['data'];
184
-    if (isset($ret['id'])) {
185
-        return $ret['id'];
47
+    if (isset($ret['uuid'])) {
48
+        return $ret['uuid'];
186 49
     } else {
187 50
         return null;
188 51
     }
... ...
@@ -9,7 +9,7 @@ function namen_korrigieren($name) {
9 9
     // Wenn CAPS-Lock an war, korrigieren wir das
10 10
     // Wir entfernen nicht-alphab. Zeichen, um nur die Buchstaben zu prüfen.
11 11
     // Wir verwenden mb_strtoupper() und mb_strtolower() für Multibyte-Sicherheit.
12
-    $nur_buchstaben = preg_replace('/[^a-zA-ZäöüÄÖÜß]/', '', $name);
12
+    $nur_buchstaben = preg_replace('/[^a-zA-ZÄäÖöÜüßÁáÀàÂâÃãÅåÇçÉéÈèÊêëÍíÌìÎîÏïÑñÓóÒòÔôÕõØøŒœŚśŞşÚúÙùÛûÝýŸÿŽž]/', '', $name);
13 13
 
14 14
     if (!empty($nur_buchstaben) && $nur_buchstaben === mb_strtoupper($nur_buchstaben, 'UTF-8')) {
15 15
         // Wenn alle Buchstaben Großbuchstaben sind (Caps-Lock aktiv),
... ...
@@ -17,35 +17,26 @@ $content = '<p>Wie möchten Sie bevorzugt kontaktiert werden, wenn Ihr Auftrag e
17 17
     <div class="row mb-1 g-3">';
18 18
 
19 19
 $num = 0;
20
-$kontakte = kunde_erste_kontakte($_SESSION['kundennr']);
20
+$phonenumbers = array_filter($_SESSION['phonenumbers'], function($v) {
21
+    return str_starts_with($v, '+491');
22
+});
23
+$emailaddrs = $_SESSION['emailaddrs'];
21 24
 
22
-if (isset($kontakte['mobil'])) {
23
-    $num+=2;
24
-}
25
-if (isset($kontakte['email'])) {
26
-    $num++;
27
-}
25
+$num = count($phonenumbers) * 2 + count($emailaddrs);
28 26
 
29 27
 if ($num < 2) {
30 28
     // Nichts zum aussuchen!
31 29
     header('Location: gitterbox.php');
32 30
 }
33 31
 
34
-if (isset($kontakte['mobil'])) {
35
-    $phone = format_number_national($_SESSION['phone']);
36
-    if (!str_starts_with($phone, '01')) {
37
-        $phone = format_number_national($kontakte['mobil']);
38
-    }
32
+foreach ($phonenumbers as $phone) {
33
+    $phone = format_number_national($phone);
39 34
     $content .= '
40 35
         <div class="col-sm-6"><a href="#" class="btn btn-lg btn-light w-100" id="btn-whatsapp">Whatsapp an<br> '.$phone.'</a></div>';
41 36
     $content .= '
42 37
         <div class="col-sm-6"><a href="#" class="btn btn-lg btn-light w-100" id="btn-sms">SMS an<br> '.$phone.'</a></div>';
43 38
 }
44
-if (isset($kontakte['email'])) {
45
-    $email = $kontakte['email'];
46
-    if ($_SESSION['email'] != $kontakte['email']) {
47
-        $email = $kontakte['email'];
48
-    }
39
+foreach ($emailaddrs as $email) {
49 40
     $content .= '
50 41
         </div>
51 42
         <div class="row">
... ...
@@ -90,7 +90,7 @@ if (isset($_REQUEST['form'])) {
90 90
             if (isset($_REQUEST['phone']) && trim($_REQUEST['phone']) != '') {
91 91
                 $number = trim($_REQUEST['phone']);
92 92
             }
93
-            if (substr($number, 0, 1) != 0 && substr($number, 0, 3) != '+49') {
93
+            if (substr($number, 0, 1) != "0" && substr($number, 0, 3) != '+49') {
94 94
                 $number = '07192'.$number;
95 95
             }
96 96
 
... ...
@@ -133,12 +133,18 @@ if (isset($_REQUEST['form'])) {
133 133
             }
134 134
             if (!isset($_SESSION['kundennr']) || !$_SESSION['kundennr']) {
135 135
                 $_SESSION['kundennr'] = erstelle_kunde($_SESSION);
136
+                $_SESSION['phonenumbers'] = [$_SESSION['phone']];
137
+                $_SESSION['emailaddrs'] = [];
138
+                if ($_SESSION['email'] != '') {
139
+                    $_SESSION['emailaddrs'][] = $_SESSION['email'];
140
+                }
136 141
                 if (!$_SESSION['kundennr']) {
137 142
                     showError();
138 143
                     }
139 144
             } else {
140 145
                 if (isset($_SESSION['email']) && $_SESSION['email']) {
141
-                    update_kunde($_SESSION['kundennr'], ['email' => $_SESSION['email']]);
146
+                    // Not implemented
147
+                    //update_kunde($_SESSION['kundennr'], ['email' => $_SESSION['email']]);
142 148
                 }
143 149
             }
144 150
 
... ...
@@ -269,18 +275,11 @@ if (isset($_SESSION['neue'])) {
269 275
     // customer
270 276
     if (isset($_SESSION['kundennr'])) {
271 277
         $auftrag['customer'] = $_SESSION['kundennr'];
272
-        $auftrag['notificationName'] = $_SESSION['name'];
273
-        $auftrag['notificationPhone'] = $_SESSION['phone'];
274
-        $auftrag['notificationEmail'] = isset($_SESSION['email']) ? $_SESSION['email'] : null;
278
+        $auftrag['name'] = $_SESSION['name'];
279
+        $auftrag['phone'] = $_SESSION['phone'];
280
+        $auftrag['email'] = isset($_SESSION['email']) ? $_SESSION['email'] : null;
275 281
         $auftrag['notificationPreference'] = $_SESSION['notificationPreference'];
276
-    }
277
-    // fruitType
278
-    $ret = api_call('GET', 'fruitTypes');
279
-    $ret = $ret['data'];
280
-    foreach ($ret as $fruit) {
281
-        if ($_SESSION['obstart'] == $fruit['label']) {
282
-            $auftrag['fruitType'] = $fruit['id'];
283
-        }
282
+        $auftrag['fruitTypeName'] = $_SESSION['obstart'];
284 283
     }
285 284
     // containers
286 285
     if (isset($_SESSION['lieferart']) && $_SESSION['lieferart'] == 'gitterbox' && isset($_SESSION['gbcount']) && $_SESSION['gbcount'] > 0) {
... ...
@@ -298,36 +297,34 @@ if (isset($_SESSION['neue'])) {
298 297
     }
299 298
     // usedPackages
300 299
     if (isset($_SESSION['kartons'])) {
301
-        $auftrag['usedPackages'] = (bool) $_SESSION['kartons'];
300
+        $auftrag['haveUsed'] = (bool) $_SESSION['kartons'];
302 301
     }
303 302
 
304 303
     // plannedPackagings
305 304
     if (isset($_SESSION['neue'])) {
305
+        $plan = [];
306 306
         if ($_SESSION['neue'] == 'sonstiges') {
307 307
             $auftrag['notes'] = (isset($_SESSION['anmerkungen']) ? $_SESSION['anmerkungen'] . "\n\n" : '') . $_SESSION["sonstiges"];
308
+        } else {
309
+            $plan[] = [
310
+                "packageType" => $_SESSION['neue'],
311
+                "wish" => "rest"
312
+            ];
308 313
         }
309
-        $plan = [];
310
-        $ret = api_call('GET', 'packageTypes');
311
-        $ret = $ret['data'];
312
-        foreach ($ret as $pt) {
313
-            if ($pt['label'] == $_SESSION['neue']) {
314
-                $plan[] = [ "packageType" => $pt['id'],
315
-                            "rest" => true ];
316
-            }
317
-            if ($pt['label'] == 'frischsaft' && isset($_SESSION['frischsaft']) && $_SESSION['frischsaft'] > 0) {
318
-                $plan[] = [ "packageType" => $pt['id'],
319
-                            "count" => $_SESSION['frischsaft']];
320
-            }
314
+        if (isset($_SESSION['frischsaft']) && $_SESSION['frischsaft'] > 0) {
315
+            $plan[] = [
316
+                "packageType" => "frischsaft",
317
+                "wish" => $_SESSION['frischsaft']
318
+            ];
321 319
         }
322
-        $auftrag['plannedPackagings'] = $plan;
320
+
321
+        $auftrag['wishes'] = $plan;
323 322
         
324 323
     }
325 324
 
326 325
 
327 326
     // notes
328
-    if (!isset($auftrag['notes'])) {
329 327
     $auftrag['notes'] = '';
330
-    }
331 328
     if (isset($_SESSION['anmerkungen']) && $_SESSION['anmerkungen'] != '') {
332 329
         $auftrag['notes'] = $_SESSION['anmerkungen'] . (isset($_SESSION["sonstiges"]) ? "\n\n" . $_SESSION["sonstiges"] : '');
333 330
     }
... ...
@@ -346,10 +343,10 @@ if (isset($_SESSION['neue'])) {
346 343
     @file_put_contents($filename, json_encode($auftrag));
347 344
      if (isset($_SESSION['orderid']) && $_SESSION['orderid']) {
348 345
         // update
349
-        $ret = api_call('PUT', 'orders/'.$_SESSION['orderid'], $auftrag);
346
+        $ret = api_call('PUT', 'anonymous/updateorder/'.$_SESSION['orderid'], $auftrag);
350 347
     } else {
351 348
         // neu
352
-        $ret = api_call('POST', 'orders', $auftrag);
349
+        $ret = api_call('POST', 'anonymous/neworder', $auftrag);
353 350
     }
354 351
     if ($ret['status_code'] >= 400) {
355 352
         foreach ($ret['data']['validation_errors'] as $item) {
... ...
@@ -358,7 +355,7 @@ if (isset($_SESSION['neue'])) {
358 355
         return showError();
359 356
     }
360 357
     $ret = $ret['data'];
361
-    $_SESSION['orderid'] = $ret['id'];
358
+    $_SESSION['orderid'] = $ret['uuid'];
362 359
 
363 360
     if (!isset($ret['id'])) {
364 361
         echo "Es gabe einen Fehler beim Abspeichern des Auftrags. Wir bitten dies zu entschuldigen und einen Papierauftrag auszufüllen.";
365 362