- Budgets page: new dept split section with % inputs, equal-split button, save - Weekly/Monthly: per-dept budget column using dept pcts from actuals response - Backend: dept_budget_pcts in ALLOWED_KEYS; actuals returns dept_pcts map; budgets route adds GET /dept-config + PUT /dept-pcts endpoints Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
55 lines
1 KiB
TypeScript
55 lines
1 KiB
TypeScript
export interface User {
|
|
email: string
|
|
name: string
|
|
is_admin: boolean
|
|
caps: string[]
|
|
}
|
|
|
|
export function can(user: User, cap: string): boolean {
|
|
return user.is_admin || user.caps.includes(cap)
|
|
}
|
|
|
|
export interface DeptActuals {
|
|
department_id: string
|
|
department_name: string
|
|
days: Record<string, { base_cost: number; total_cost: number; cost: number; shift_count: number }>
|
|
}
|
|
|
|
export interface DeptScheduled {
|
|
department_id: string
|
|
department_name: string
|
|
days: Record<string, { cost: number; shift_count: number }>
|
|
}
|
|
|
|
export interface NetSalesDay {
|
|
date: string
|
|
net_sales: number
|
|
py_sales: number
|
|
accom: number
|
|
dry: number
|
|
wet: number
|
|
is_past: boolean
|
|
}
|
|
|
|
export interface WageBudget {
|
|
month: string // 'YYYY-MM-DD' (first of month)
|
|
budget_amount: number
|
|
}
|
|
|
|
export interface Department {
|
|
id: string
|
|
name: string
|
|
enabled?: boolean
|
|
}
|
|
|
|
export interface AppSetting {
|
|
key: string
|
|
value: string
|
|
updated_at: string
|
|
}
|
|
|
|
export interface DeptPct {
|
|
id: string
|
|
name: string
|
|
pct: number
|
|
}
|