new features
This commit is contained in:
@@ -9,6 +9,7 @@ import {
|
||||
CreateAusruestungData,
|
||||
UpdateAusruestungData,
|
||||
CreateAusruestungWartungslogData,
|
||||
UpdateAusruestungWartungslogData,
|
||||
AusruestungStatus,
|
||||
EquipmentStats,
|
||||
VehicleEquipmentWarning,
|
||||
@@ -330,6 +331,15 @@ class EquipmentService {
|
||||
|
||||
const entry = result.rows[0] as AusruestungWartungslog;
|
||||
logger.info('Equipment wartungslog entry added', { entryId: entry.id, equipmentId, by: createdBy });
|
||||
|
||||
// Auto-update next inspection date on the equipment when result is 'bestanden'
|
||||
if (data.ergebnis === 'bestanden' && data.naechste_pruefung_am) {
|
||||
await pool.query(
|
||||
`UPDATE ausruestung SET naechste_pruefung_am = $1, letzte_pruefung_am = $2 WHERE id = $3`,
|
||||
[data.naechste_pruefung_am, data.datum, equipmentId]
|
||||
);
|
||||
}
|
||||
|
||||
return entry;
|
||||
} catch (error) {
|
||||
logger.error('EquipmentService.addWartungslog failed', { error, equipmentId });
|
||||
@@ -461,6 +471,70 @@ class EquipmentService {
|
||||
}
|
||||
}
|
||||
|
||||
// =========================================================================
|
||||
// WARTUNGSLOG UPDATE
|
||||
// =========================================================================
|
||||
|
||||
async updateWartungslog(
|
||||
equipmentId: string,
|
||||
wartungId: number,
|
||||
data: UpdateAusruestungWartungslogData,
|
||||
updatedBy: string
|
||||
): Promise<AusruestungWartungslog> {
|
||||
try {
|
||||
// Verify the wartung entry belongs to this equipment
|
||||
const check = await pool.query(
|
||||
`SELECT id FROM ausruestung_wartungslog WHERE id = $1 AND ausruestung_id = $2`,
|
||||
[wartungId, equipmentId]
|
||||
);
|
||||
if (check.rows.length === 0) {
|
||||
throw new Error('Wartungseintrag nicht gefunden');
|
||||
}
|
||||
|
||||
const fields: string[] = [];
|
||||
const values: unknown[] = [];
|
||||
let p = 1;
|
||||
|
||||
const addField = (col: string, value: unknown) => {
|
||||
fields.push(`${col} = $${p++}`);
|
||||
values.push(value);
|
||||
};
|
||||
|
||||
if (data.datum !== undefined) addField('datum', data.datum);
|
||||
if (data.art !== undefined) addField('art', data.art);
|
||||
if (data.beschreibung !== undefined) addField('beschreibung', data.beschreibung);
|
||||
if (data.ergebnis !== undefined) addField('ergebnis', data.ergebnis);
|
||||
if (data.kosten !== undefined) addField('kosten', data.kosten);
|
||||
if (data.pruefende_stelle !== undefined) addField('pruefende_stelle', data.pruefende_stelle);
|
||||
|
||||
if (fields.length === 0) {
|
||||
throw new Error('No fields to update');
|
||||
}
|
||||
|
||||
values.push(wartungId);
|
||||
const result = await pool.query(
|
||||
`UPDATE ausruestung_wartungslog SET ${fields.join(', ')} WHERE id = $${p} RETURNING *`,
|
||||
values
|
||||
);
|
||||
|
||||
const entry = result.rows[0] as AusruestungWartungslog;
|
||||
|
||||
// Auto-update next inspection date on the equipment when result is 'bestanden'
|
||||
if (data.ergebnis === 'bestanden' && data.naechste_pruefung_am) {
|
||||
await pool.query(
|
||||
`UPDATE ausruestung SET naechste_pruefung_am = $1, letzte_pruefung_am = $2 WHERE id = $3`,
|
||||
[data.naechste_pruefung_am, data.datum ?? entry.datum, equipmentId]
|
||||
);
|
||||
}
|
||||
|
||||
logger.info('Equipment wartungslog entry updated', { wartungId, equipmentId, by: updatedBy });
|
||||
return entry;
|
||||
} catch (error) {
|
||||
logger.error('EquipmentService.updateWartungslog failed', { error, wartungId, equipmentId });
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// =========================================================================
|
||||
// WARTUNGSLOG FILE UPLOAD
|
||||
// =========================================================================
|
||||
|
||||
Reference in New Issue
Block a user