prepare('SELECT id FROM party WHERE email = :email LIMIT 1'); $stmt->execute([':email' => $email]); $existing = $stmt->fetchColumn(); if ($existing !== false) { return (int) $existing; } } $name = trim((string) ($data['Vorname'] ?? $data['firstName'] ?? '')) . ' ' . trim((string) ($data['Nachname'] ?? $data['lastName'] ?? '')); $name = trim($name); if ($name === '') { $name = trim((string) ($data['Firmenname'] ?? $data['company'] ?? '')); } if ($name === '') { $name = 'Unbekannter Kontakt'; } $stmt = $pdo->prepare( "INSERT INTO party (type, name, email, status, created_at, updated_at) VALUES ('customer', :name, :email, 'active', NOW(), NOW()) RETURNING id" ); $stmt->execute([ ':name' => $name, ':email' => $email !== '' ? $email : null, ]); $id = $stmt->fetchColumn(); if ($id === false) { throw new RuntimeException('Could not create party'); } return (int) $id; } function upsert_addresses(PDO $pdo, int $partyId, array $data): void { $addressData = [ 'billing' => [ 'first_name' => trim((string) ($data['Vorname'] ?? $data['firstName'] ?? '')), 'last_name' => trim((string) ($data['Nachname'] ?? $data['lastName'] ?? '')), 'street' => trim((string) ($data['Strasse'] ?? $data['street'] ?? '')), 'house_number' => trim((string) ($data['Hausnummer'] ?? $data['houseNumber'] ?? '')), 'zip' => trim((string) ($data['PLZ'] ?? $data['zip'] ?? '')), 'city' => trim((string) ($data['Ort'] ?? $data['city'] ?? '')), 'country_name' => trim((string) ($data['Land'] ?? $data['country'] ?? 'Switzerland')), ], ]; foreach ($addressData as $type => $address) { if ($address['street'] === '' && $address['city'] === '' && $address['zip'] === '') { continue; } $stmt = $pdo->prepare( "INSERT INTO address ( party_id, type, first_name, last_name, street, house_number, zip, city, country_name, created_at, updated_at ) VALUES ( :party_id, :type, :first_name, :last_name, :street, :house_number, :zip, :city, :country_name, NOW(), NOW() )" ); $stmt->execute([ ':party_id' => $partyId, ':type' => $type, ':first_name' => $address['first_name'], ':last_name' => $address['last_name'], ':street' => $address['street'], ':house_number' => $address['house_number'], ':zip' => $address['zip'], ':city' => $address['city'], ':country_name' => $address['country_name'] !== '' ? $address['country_name'] : 'Switzerland', ]); } }