feat: add issue kanban/attachments/deadlines, dashboard widget DnD, and checklisten system

This commit is contained in:
Matthias Hochmeister
2026-03-28 15:19:41 +01:00
parent a1cda5be51
commit 0c2ea829aa
42 changed files with 4804 additions and 201 deletions

View File

@@ -0,0 +1,162 @@
export interface FahrzeugTyp {
id: number;
name: string;
beschreibung?: string;
icon?: string;
created_at: string;
}
export interface ChecklistVorlageItem {
id: number;
vorlage_id: number;
bezeichnung: string;
beschreibung?: string;
pflicht: boolean;
sort_order: number;
}
export interface ChecklistVorlage {
id: number;
name: string;
fahrzeug_typ_id?: number;
fahrzeug_typ?: FahrzeugTyp;
intervall?: 'weekly' | 'monthly' | 'yearly' | 'custom';
intervall_tage?: number;
beschreibung?: string;
aktiv: boolean;
items?: ChecklistVorlageItem[];
created_at: string;
updated_at: string;
}
export interface FahrzeugChecklistItem {
id: number;
fahrzeug_id: string;
bezeichnung: string;
beschreibung?: string;
pflicht: boolean;
sort_order: number;
aktiv: boolean;
}
export interface ChecklistAusfuehrungItem {
id: number;
ausfuehrung_id: string;
vorlage_item_id?: number;
fahrzeug_item_id?: number;
bezeichnung: string;
ergebnis?: 'ok' | 'nok' | 'na';
kommentar?: string;
created_at: string;
}
export interface ChecklistAusfuehrung {
id: string;
fahrzeug_id: string;
fahrzeug_name?: string;
vorlage_id?: number;
vorlage_name?: string;
status: 'offen' | 'abgeschlossen' | 'unvollstaendig' | 'freigegeben';
ausgefuehrt_von?: string;
ausgefuehrt_von_name?: string;
ausgefuehrt_am?: string;
freigegeben_von?: string;
freigegeben_von_name?: string;
freigegeben_am?: string;
notizen?: string;
items?: ChecklistAusfuehrungItem[];
created_at: string;
}
export interface ChecklistFaelligkeit {
fahrzeug_id: string;
fahrzeug_name: string;
vorlage_id: number;
vorlage_name: string;
naechste_faellig_am: string;
letzte_ausfuehrung_id?: string;
}
export type ChecklistAusfuehrungStatus = ChecklistAusfuehrung['status'];
export const CHECKLIST_STATUS_LABELS: Record<ChecklistAusfuehrungStatus, string> = {
offen: 'Offen',
abgeschlossen: 'Abgeschlossen',
unvollstaendig: 'Unvollst\u00e4ndig',
freigegeben: 'Freigegeben',
};
export const CHECKLIST_STATUS_COLORS: Record<ChecklistAusfuehrungStatus, 'default' | 'warning' | 'success' | 'info'> = {
offen: 'default',
abgeschlossen: 'info',
unvollstaendig: 'warning',
freigegeben: 'success',
};
export interface ChecklistVorlageFilter {
fahrzeug_typ_id?: number;
aktiv?: boolean;
}
export interface ChecklistAusfuehrungFilter {
fahrzeug_id?: string;
vorlage_id?: number;
status?: ChecklistAusfuehrungStatus[];
}
export interface CreateVorlagePayload {
name: string;
fahrzeug_typ_id?: number;
intervall?: 'weekly' | 'monthly' | 'yearly' | 'custom';
intervall_tage?: number;
beschreibung?: string;
aktiv?: boolean;
}
export interface UpdateVorlagePayload {
name?: string;
fahrzeug_typ_id?: number | null;
intervall?: 'weekly' | 'monthly' | 'yearly' | 'custom' | null;
intervall_tage?: number | null;
beschreibung?: string | null;
aktiv?: boolean;
}
export interface CreateVorlageItemPayload {
bezeichnung: string;
beschreibung?: string;
pflicht?: boolean;
sort_order?: number;
}
export interface UpdateVorlageItemPayload {
bezeichnung?: string;
beschreibung?: string | null;
pflicht?: boolean;
sort_order?: number;
}
export interface CreateFahrzeugItemPayload {
bezeichnung: string;
beschreibung?: string;
pflicht?: boolean;
sort_order?: number;
}
export interface UpdateFahrzeugItemPayload {
bezeichnung?: string;
beschreibung?: string | null;
pflicht?: boolean;
sort_order?: number;
aktiv?: boolean;
}
export interface SubmitAusfuehrungPayload {
items: { itemId: number; ergebnis: 'ok' | 'nok' | 'na'; kommentar?: string }[];
notizen?: string;
}
export interface ChecklistWidgetSummary {
overdue: ChecklistFaelligkeit[];
dueSoon: ChecklistFaelligkeit[];
}

View File

@@ -25,6 +25,7 @@ export interface Issue {
erstellt_von_name?: string;
zugewiesen_an: string | null;
zugewiesen_an_name?: string | null;
faellig_am: string | null;
created_at: string;
updated_at: string;
}
@@ -53,6 +54,7 @@ export interface CreateIssuePayload {
beschreibung?: string;
typ_id?: number;
prioritaet?: string;
faellig_am?: string | null;
}
export interface UpdateIssuePayload {
@@ -63,6 +65,7 @@ export interface UpdateIssuePayload {
status?: string;
zugewiesen_an?: string | null;
kommentar?: string;
faellig_am?: string | null;
}
export interface IssueFilters {
@@ -108,3 +111,14 @@ export interface IssueStatusCount {
}
export type IssueWidgetSummary = IssueStatusCount[];
export interface IssueDatei {
id: string;
issue_id: number;
dateiname: string;
dateipfad: string;
dateityp: string | null;
dateigroesse: number | null;
hochgeladen_von: string | null;
hochgeladen_am: string;
}