feat(mehrere): Auslastung bis heute, Satz je Task bearbeitbar, Bestellnummer, Rolle Externe
Auslastung Verglichen werden jetzt die bis heute gebuchten Stunden mit der Kapazitaet bis heute. Die Kapazitaet endete schon immer am heutigen Tag; wurde im Voraus gebucht - eine ganze Woche Urlaub am Montag - standen 40 Stunden gegen 8 Stunden Kapazitaet und die Wochenansicht zeigte 500 Prozent. Die Spalte "Stunden" zeigt weiter den ganzen Zeitraum. Tasks Das Feld zum Hinzufuegen lief aus der Karte heraus: die Zeile darf jetzt umbrechen, und die Breitenangaben tragen "!", weil inputClass w-full mitbringt und sonst gewinnt. Der Satz eines Tasks steht als schmales Feld direkt in der Zeile und wird beim Verlassen gespeichert - vorher lag er hinter einem Abfragedialog und war praktisch nicht zu finden. Export der Buchungen Kunde und Projekt kommen nur noch aus den eigenen Zuweisungen, auch fuer Vorgesetzte. Eine Liste aller Projekte des Hauses war dort nur Suchaufwand. Budgettopf Neues Feld Bestellnummer (optional). Es erscheint im Stundennachweis als eigene Kopfzeile, wenn die gebuchten Toepfe eine tragen. Rolle "Externe" Gleiche Rechte wie "Mitarbeiter" und derselbe Rang, die Rolle trennt nur, wer zum Haus gehoert. Sie setzt is_external automatisch, damit Liste und Kennzeichnung nicht widersprechen. Vorgesetzte duerfen sie vergeben. Stellen, die bisher role === 'user' pruefen, fragen nun hasRole(lead) ab - sonst haetten Externe alle Projekte gesehen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
532b15ce99
commit
79bfd561bd
+9
-2
@@ -285,7 +285,9 @@ export const customersApi = {
|
||||
remove: (id: number) => send<{ ok: true }>('DELETE', `/customers/${id}`),
|
||||
};
|
||||
|
||||
export type PotInput = Partial<Pick<BudgetPot, 'label' | 'valid_from' | 'valid_to' | 'budget_amount' | 'rate' | 'budget_hours' | 'notes'>>;
|
||||
export type PotInput = Partial<
|
||||
Pick<BudgetPot, 'label' | 'valid_from' | 'valid_to' | 'budget_amount' | 'rate' | 'budget_hours' | 'order_number' | 'notes'>
|
||||
>;
|
||||
|
||||
export const projectsApi = {
|
||||
list: (scope?: 'mine') => get<Project[]>(`/projects${qs({ scope })}`),
|
||||
@@ -334,7 +336,7 @@ export interface DashboardData {
|
||||
team_size: number;
|
||||
series: SeriesBucket[];
|
||||
kpis: {
|
||||
current: SeriesBucket & { capacity_minutes: number };
|
||||
current: SeriesBucket & { capacity_minutes: number; minutes_until_today: number };
|
||||
previous: SeriesBucket | null;
|
||||
period_label: string;
|
||||
previous_label: string | null;
|
||||
@@ -346,6 +348,8 @@ export interface DashboardData {
|
||||
avatar: string | null;
|
||||
job_title: string | null;
|
||||
is_external: boolean;
|
||||
/** Nur bis heute - Grundlage der Auslastung. */
|
||||
minutes_until_today: number;
|
||||
minutes: number;
|
||||
billable_minutes: number;
|
||||
non_billable_minutes: number;
|
||||
@@ -392,6 +396,7 @@ export interface GroupRow {
|
||||
type?: string;
|
||||
is_external?: boolean;
|
||||
capacity_minutes?: number;
|
||||
minutes_until_today?: number;
|
||||
utilization?: number | null;
|
||||
}
|
||||
|
||||
@@ -406,6 +411,8 @@ export interface TimeReport {
|
||||
amount_without_fixed: number;
|
||||
fixed_amount: number;
|
||||
entries: number;
|
||||
/** Nur bis heute gebucht - Grundlage der Auslastung. */
|
||||
minutes_until_today: number;
|
||||
};
|
||||
clients: GroupRow[];
|
||||
projects: GroupRow[];
|
||||
|
||||
Reference in New Issue
Block a user