From 0ebd635155d936abcf44a78e89238f5d4a4f002c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mathias=20Gla=CC=88ser?= Date: Tue, 16 Jun 2026 15:40:46 +0200 Subject: [PATCH] Generate direct order refs --- modules/erp/bestellungen/service.php | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/modules/erp/bestellungen/service.php b/modules/erp/bestellungen/service.php index ee55ce6..fa6c735 100644 --- a/modules/erp/bestellungen/service.php +++ b/modules/erp/bestellungen/service.php @@ -125,14 +125,25 @@ function upsert_sales_order(PDO $pdo, array $fields): int function create_direct_sales_order(PDO $pdo, array $fields): array { + $orderDate = trim((string) ($fields[':order_date'] ?? '')); + if ($orderDate === '') { + throw new RuntimeException('Missing order date'); + } + $stmt = $pdo->prepare( - "INSERT INTO sales_order ( - external_ref, party_id, order_source, order_date, order_status, payment_status, payment_method_id, - amount_net, amount_shipping, amount_tax, amount_discount, total_amount, currency, imported_at, created_at, updated_at - ) VALUES ( - '', :party_id, 'direct', :order_date, 'imported', 'paid', :payment_method_id, - :amount_net, 0, 0, 0, :total_amount, 'CHF', NOW(), NOW(), NOW() + "WITH next_id AS ( + SELECT nextval(pg_get_serial_sequence('sales_order', 'id')) AS id ) + INSERT INTO sales_order ( + id, external_ref, party_id, order_source, order_date, order_status, payment_status, payment_method_id, + amount_net, amount_shipping, amount_tax, amount_discount, total_amount, currency, imported_at, created_at, updated_at + ) + SELECT + next_id.id, + 'DIR-' || TO_CHAR(CAST(:order_date AS timestamp), 'YYYYMMDD') || '-' || LPAD(next_id.id::text, 5, '0'), + :party_id, 'direct', :order_date, 'imported', 'paid', :payment_method_id, + :amount_net, 0, 0, 0, :total_amount, 'CHF', NOW(), NOW(), NOW() + FROM next_id RETURNING id, external_ref" ); $stmt->execute($fields);