feat(ausruestungsanfrage): show vendor order status and delivery progress in request detail
This commit is contained in:
@@ -409,19 +409,64 @@ async function getRequestById(id: number) {
|
||||
} catch { /* table may not exist */ }
|
||||
}
|
||||
|
||||
// Load per-position vendor order info (anfrage_position_id FK, added in migration 096)
|
||||
let positionBestellInfoMap: Record<number, {
|
||||
bestellung_id: number;
|
||||
bestellung_bezeichnung: string;
|
||||
bestellung_status: string;
|
||||
bestellung_laufende_nummer: number | null;
|
||||
bestellung_erstellt_am: string;
|
||||
erhalten_menge: number;
|
||||
bestellt_menge: number;
|
||||
}> = {};
|
||||
if (positionIds.length > 0) {
|
||||
try {
|
||||
const bpResult = await pool.query(
|
||||
`SELECT bp.anfrage_position_id,
|
||||
bp.bestellung_id,
|
||||
bp.erhalten_menge,
|
||||
bp.menge AS bestellt_menge,
|
||||
b.bezeichnung AS bestellung_bezeichnung,
|
||||
b.status AS bestellung_status,
|
||||
b.laufende_nummer AS bestellung_laufende_nummer,
|
||||
b.erstellt_am AS bestellung_erstellt_am
|
||||
FROM bestellpositionen bp
|
||||
JOIN bestellungen b ON b.id = bp.bestellung_id
|
||||
WHERE bp.anfrage_position_id = ANY($1)`,
|
||||
[positionIds],
|
||||
);
|
||||
for (const row of bpResult.rows) {
|
||||
positionBestellInfoMap[row.anfrage_position_id] = {
|
||||
bestellung_id: row.bestellung_id,
|
||||
bestellung_bezeichnung: row.bestellung_bezeichnung,
|
||||
bestellung_status: row.bestellung_status,
|
||||
bestellung_laufende_nummer: row.bestellung_laufende_nummer ?? null,
|
||||
bestellung_erstellt_am: row.bestellung_erstellt_am,
|
||||
erhalten_menge: Number(row.erhalten_menge),
|
||||
bestellt_menge: Number(row.bestellt_menge),
|
||||
};
|
||||
}
|
||||
} catch { /* bestellpositionen.anfrage_position_id may not exist */ }
|
||||
}
|
||||
|
||||
const positionenWithEigenschaften = positionen.rows.map((p: { id: number }) => ({
|
||||
...p,
|
||||
eigenschaften: eigenschaftenMap[p.id] || [],
|
||||
bestellung_info: positionBestellInfoMap[p.id] ?? null,
|
||||
}));
|
||||
|
||||
// Load linked bestellungen
|
||||
// Load linked bestellungen with delivery totals
|
||||
let linkedBestellungen: unknown[] = [];
|
||||
try {
|
||||
const bestellungen = await pool.query(
|
||||
`SELECT b.*
|
||||
`SELECT b.id, b.bezeichnung, b.status, b.laufende_nummer, b.erstellt_am,
|
||||
COALESCE(SUM(bp.erhalten_menge), 0)::int AS total_received,
|
||||
COALESCE(SUM(bp.menge), 0)::int AS total_ordered
|
||||
FROM ausruestung_anfrage_bestellung ab
|
||||
JOIN bestellungen b ON b.id = ab.bestellung_id
|
||||
WHERE ab.anfrage_id = $1`,
|
||||
LEFT JOIN bestellpositionen bp ON bp.bestellung_id = b.id
|
||||
WHERE ab.anfrage_id = $1
|
||||
GROUP BY b.id, b.bezeichnung, b.status, b.laufende_nummer, b.erstellt_am`,
|
||||
[id],
|
||||
);
|
||||
linkedBestellungen = bestellungen.rows;
|
||||
|
||||
Reference in New Issue
Block a user