Split ERP flows into modules
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
function find_or_create_party(PDO $pdo, array $data): int
|
||||
{
|
||||
$email = trim((string) ($data['E-Mail'] ?? $data['email'] ?? ''));
|
||||
if ($email !== '') {
|
||||
$stmt = $pdo->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',
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user