refactor external orders

This commit is contained in:
Matthias Hochmeister
2026-03-25 14:26:41 +01:00
parent 561334791b
commit 5add6590e5
10 changed files with 740 additions and 259 deletions

View File

@@ -119,13 +119,17 @@ async function getOrders(filters?: { status?: string; lieferant_id?: number; bes
l.name AS lieferant_name,
COALESCE(u.name, u.preferred_username, u.email) AS besteller_name,
COALESCE(pos.total_cost, 0) AS total_cost,
COALESCE(pos.items_count, 0) AS items_count
COALESCE(pos.items_count, 0) AS items_count,
COALESCE(pos.total_received, 0) AS total_received,
COALESCE(pos.total_ordered, 0) AS total_ordered
FROM bestellungen b
LEFT JOIN lieferanten l ON l.id = b.lieferant_id
LEFT JOIN users u ON u.id = b.erstellt_von
LEFT JOIN LATERAL (
SELECT SUM(einzelpreis * menge) AS total_cost,
COUNT(*) AS items_count
COUNT(*) AS items_count,
SUM(erhalten_menge) AS total_received,
SUM(menge) AS total_ordered
FROM bestellpositionen
WHERE bestellung_id = b.id
) pos ON true
@@ -178,12 +182,21 @@ async function createOrder(data: { bezeichnung: string; lieferant_id?: number; b
const client = await pool.connect();
try {
await client.query('BEGIN');
// Get next laufende_nummer for the current year
const nrResult = await client.query(
`SELECT COALESCE(MAX(laufende_nummer), 0) + 1 AS next_nr
FROM bestellungen
WHERE EXTRACT(YEAR FROM erstellt_am) = EXTRACT(YEAR FROM NOW())`
);
const laufendeNummer = nrResult.rows[0].next_nr;
const bestellerId = data.besteller_id && data.besteller_id.trim() ? data.besteller_id.trim() : null;
const result = await client.query(
`INSERT INTO bestellungen (bezeichnung, lieferant_id, besteller_id, notizen, budget, steuersatz, erstellt_von)
VALUES ($1, $2, $3, $4, $5, $6, $7)
`INSERT INTO bestellungen (bezeichnung, lieferant_id, besteller_id, notizen, budget, steuersatz, laufende_nummer, erstellt_von)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
RETURNING *`,
[data.bezeichnung, data.lieferant_id || null, bestellerId, data.notizen || null, data.budget || null, data.steuersatz ?? 20, userId]
[data.bezeichnung, data.lieferant_id || null, bestellerId, data.notizen || null, data.budget || null, data.steuersatz ?? 20, laufendeNummer, userId]
);
const order = result.rows[0];