Send invoice data to Excel webhook
This commit is contained in:
@@ -110,6 +110,76 @@ function build_n8n_webhook_headers(array $localEnv): array
|
||||
return $headers;
|
||||
}
|
||||
|
||||
function load_excel_order_payload(PDO $pdo, int $orderId): array
|
||||
{
|
||||
$stmt = $pdo->prepare(
|
||||
"SELECT
|
||||
so.external_ref,
|
||||
so.order_date,
|
||||
so.order_source,
|
||||
so.order_status,
|
||||
so.payment_status,
|
||||
p.name AS party_name,
|
||||
p.email AS party_email,
|
||||
a.first_name,
|
||||
a.last_name,
|
||||
a.company_name,
|
||||
a.street,
|
||||
a.house_number,
|
||||
a.zip,
|
||||
a.city,
|
||||
a.country_name,
|
||||
a.country_iso2
|
||||
FROM sales_order so
|
||||
LEFT JOIN party p ON p.id = so.party_id
|
||||
LEFT JOIN LATERAL (
|
||||
SELECT *
|
||||
FROM address
|
||||
WHERE party_id = so.party_id
|
||||
AND type = 'billing'
|
||||
ORDER BY id DESC
|
||||
LIMIT 1
|
||||
) a ON TRUE
|
||||
WHERE so.id = :order_id
|
||||
LIMIT 1"
|
||||
);
|
||||
$stmt->execute([':order_id' => $orderId]);
|
||||
$row = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
if (!is_array($row)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$firstName = trim((string) ($row['first_name'] ?? ''));
|
||||
$lastName = trim((string) ($row['last_name'] ?? ''));
|
||||
$companyName = trim((string) ($row['company_name'] ?? ''));
|
||||
$partyName = trim((string) ($row['party_name'] ?? ''));
|
||||
$fullName = trim($firstName . ' ' . $lastName);
|
||||
if ($fullName === '') {
|
||||
$fullName = $partyName !== '' ? $partyName : $companyName;
|
||||
}
|
||||
|
||||
return [
|
||||
'Bestellnummer' => (string) ($row['external_ref'] ?? ''),
|
||||
'Name' => $fullName,
|
||||
'Vorname' => $firstName,
|
||||
'Nachname' => $lastName,
|
||||
'Firmenname' => $companyName !== '' ? $companyName : $partyName,
|
||||
'Email' => trim((string) ($row['party_email'] ?? '')),
|
||||
'Rechnungsadresse' => [
|
||||
'Vorname' => $firstName,
|
||||
'Nachname' => $lastName,
|
||||
'Firmenname' => $companyName !== '' ? $companyName : $partyName,
|
||||
'Strasse' => trim((string) ($row['street'] ?? '')),
|
||||
'Hausnummer' => trim((string) ($row['house_number'] ?? '')),
|
||||
'PLZ' => trim((string) ($row['zip'] ?? '')),
|
||||
'Ort' => trim((string) ($row['city'] ?? '')),
|
||||
'Land' => trim((string) ($row['country_name'] ?? '')),
|
||||
'LandIso2' => trim((string) ($row['country_iso2'] ?? '')),
|
||||
'Email' => trim((string) ($row['party_email'] ?? '')),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
function trigger_shipping_label_flow(array $order, array $localEnv): array
|
||||
{
|
||||
$url = derive_label_webhook_url($localEnv);
|
||||
@@ -171,7 +241,7 @@ function dispatch_order_import_webhooks(PDO $pdo, array $localEnv, int $limit =
|
||||
$pdo->beginTransaction();
|
||||
|
||||
$stmt = $pdo->query(
|
||||
"SELECT id, payload, attempt_count
|
||||
"SELECT id, aggregate_id, payload, attempt_count
|
||||
FROM outbound_webhook_event
|
||||
WHERE event_type = 'order.imported'
|
||||
AND status IN ('pending', 'failed')
|
||||
@@ -227,7 +297,33 @@ function dispatch_order_import_webhooks(PDO $pdo, array $localEnv, int $limit =
|
||||
}
|
||||
|
||||
throttle_webhook_channel('excel', 5);
|
||||
$result = post_json($url, ['Bestellnummer' => $externalRef], $headers, 20);
|
||||
$payload = load_excel_order_payload($pdo, (int) $event['aggregate_id']);
|
||||
if ($payload === []) {
|
||||
$update = $pdo->prepare(
|
||||
"UPDATE outbound_webhook_event
|
||||
SET status = 'dead_letter',
|
||||
last_attempt_at = NOW(),
|
||||
last_error = :last_error,
|
||||
next_attempt_at = NOW(),
|
||||
attempt_count = :attempt_count
|
||||
WHERE id = :id"
|
||||
);
|
||||
$update->execute([
|
||||
':last_error' => 'Could not build Excel payload from order data',
|
||||
':attempt_count' => $attemptCount,
|
||||
':id' => $eventId,
|
||||
]);
|
||||
|
||||
$pdo->commit();
|
||||
$summary['processed']++;
|
||||
$summary['failed']++;
|
||||
$summary['deadLetter']++;
|
||||
$summary['ok'] = false;
|
||||
$summary['message'] = 'Could not build Excel payload from order data';
|
||||
continue;
|
||||
}
|
||||
|
||||
$result = post_json($url, $payload, $headers, 20);
|
||||
|
||||
$summary['processed']++;
|
||||
$summary['status'] = $result['status'];
|
||||
|
||||
Reference in New Issue
Block a user