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( payload_first_non_empty($data, ['Vorname', 'firstName', 'Vorname_RgAdr', 'Vorname_LfAdr']) . ' ' . payload_first_non_empty($data, ['Nachname', 'lastName', 'Nachname_RgAdr', 'Nachname_LfAdr']) ); $name = trim($name); if ($name === '') { $name = payload_first_non_empty($data, ['Firmenname', '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' => payload_first_non_empty($data, ['Vorname', 'firstName', 'Vorname_RgAdr']), 'last_name' => payload_first_non_empty($data, ['Nachname', 'lastName', 'Nachname_RgAdr']), 'street' => payload_first_non_empty($data, ['Strasse', 'street', 'Strasse_RgAdr']), 'house_number' => payload_first_non_empty($data, ['Hausnummer', 'houseNumber', 'Hausnummer_RgAdr']), 'zip' => payload_first_non_empty($data, ['PLZ', 'zip', 'PLZ_RgAdr']), 'city' => payload_first_non_empty($data, ['Ort', 'city', 'Stadt_RgAdr']), 'country_name' => payload_first_non_empty($data, ['Land', 'country', 'Land_RgAdr'], 'Switzerland'), ], 'shipping' => [ 'first_name' => payload_first_non_empty($data, ['Vorname_LfAdr']), 'last_name' => payload_first_non_empty($data, ['Nachname_LfAdr']), 'street' => payload_first_non_empty($data, ['Strasse_LfAdr']), 'house_number' => payload_first_non_empty($data, ['Hausnummer_LfAdr']), 'zip' => payload_first_non_empty($data, ['PLZ_LfAdr']), 'city' => payload_first_non_empty($data, ['Stadt_LfAdr', 'Ort_LfAdr']), 'country_name' => payload_first_non_empty($data, ['Land_LfAdr'], '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', ]); } }