rework internal order system

This commit is contained in:
Matthias Hochmeister
2026-03-24 14:02:16 +01:00
parent 90944ca5f6
commit abb337c683
9 changed files with 261 additions and 75 deletions

View File

@@ -266,6 +266,20 @@ async function deleteArtikelEigenschaft(id: number) {
await pool.query('DELETE FROM ausruestung_artikel_eigenschaften WHERE id = $1', [id]);
}
// ---------------------------------------------------------------------------
// Users (for "order on behalf of" autocomplete)
// ---------------------------------------------------------------------------
async function getAllUsers() {
const result = await pool.query(
`SELECT id, COALESCE(given_name || ' ' || family_name, name) AS name
FROM users
WHERE is_active = true
ORDER BY name`,
);
return result.rows;
}
// ---------------------------------------------------------------------------
// Requests (ausruestung_anfragen)
// ---------------------------------------------------------------------------
@@ -288,6 +302,7 @@ async function getRequests(filters?: { status?: string; anfrager_id?: string })
`SELECT a.*,
COALESCE(u.given_name || ' ' || u.family_name, u.name) AS anfrager_name,
COALESCE(u2.given_name || ' ' || u2.family_name, u2.name) AS bearbeitet_von_name,
a.fuer_benutzer_name,
(SELECT COUNT(*)::int FROM ausruestung_anfrage_positionen p WHERE p.anfrage_id = a.id) AS positionen_count,
(SELECT COUNT(*)::int FROM ausruestung_anfrage_positionen p WHERE p.anfrage_id = a.id AND p.geliefert) AS geliefert_count
FROM ausruestung_anfragen a
@@ -316,7 +331,8 @@ async function getRequestById(id: number) {
const reqResult = await pool.query(
`SELECT a.*,
COALESCE(u.given_name || ' ' || u.family_name, u.name) AS anfrager_name,
COALESCE(u2.given_name || ' ' || u2.family_name, u2.name) AS bearbeitet_von_name
COALESCE(u2.given_name || ' ' || u2.family_name, u2.name) AS bearbeitet_von_name,
a.fuer_benutzer_name
FROM ausruestung_anfragen a
LEFT JOIN users u ON u.id = a.anfrager_id
LEFT JOIN users u2 ON u2.id = a.bearbeitet_von
@@ -388,6 +404,7 @@ async function createRequest(
items: { artikel_id?: number; bezeichnung: string; menge: number; notizen?: string; eigenschaften?: { eigenschaft_id: number; wert: string }[] }[],
notizen?: string,
bezeichnung?: string,
fuerBenutzerName?: string,
) {
const client = await pool.connect();
try {
@@ -407,20 +424,20 @@ async function createRequest(
);
const nextNr = maxResult.rows[0].next_nr;
const anfrageResult = await client.query(
`INSERT INTO ausruestung_anfragen (anfrager_id, notizen, bezeichnung, bestell_nummer, bestell_jahr)
VALUES ($1, $2, $3, $4, $5)
`INSERT INTO ausruestung_anfragen (anfrager_id, notizen, bezeichnung, bestell_nummer, bestell_jahr, fuer_benutzer_name)
VALUES ($1, $2, $3, $4, $5, $6)
RETURNING *`,
[userId, notizen || null, bezeichnung || null, nextNr, currentYear],
[userId, notizen || null, bezeichnung || null, nextNr, currentYear, fuerBenutzerName || null],
);
await client.query('RELEASE SAVEPOINT sp_bestell_nr');
anfrage = anfrageResult.rows[0];
} catch {
await client.query('ROLLBACK TO SAVEPOINT sp_bestell_nr');
const anfrageResult = await client.query(
`INSERT INTO ausruestung_anfragen (anfrager_id, notizen, bezeichnung)
VALUES ($1, $2, $3)
`INSERT INTO ausruestung_anfragen (anfrager_id, notizen, bezeichnung, fuer_benutzer_name)
VALUES ($1, $2, $3, $4)
RETURNING *`,
[userId, notizen || null, bezeichnung || null],
[userId, notizen || null, bezeichnung || null, fuerBenutzerName || null],
);
anfrage = anfrageResult.rows[0];
}
@@ -752,6 +769,7 @@ async function getWidgetOverview() {
}
export default {
getAllUsers,
getKategorien,
createKategorie,
updateKategorie,