refactor external orders
This commit is contained in:
@@ -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];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user