- Add GET /api/vehicles/inventory-stats endpoint that groups inventory vehicles by macro-region, city, brand, type, model, and batch - Add RegionalInventoryStats type and fetchInventoryStats API function - Add full inventory statistics section with region/model tabs, filters, desktop table, and mobile views - Add modal filters (plate number, model, brand, location search) to vehicle detail modal - Update modal header to support title field for contextual naming Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
171 lines
3.4 KiB
TypeScript
171 lines
3.4 KiB
TypeScript
export interface SummaryData {
|
|
totalAssets: number;
|
|
operating: {
|
|
total: number;
|
|
self: number;
|
|
leased: number;
|
|
public: number;
|
|
hanging: number;
|
|
};
|
|
inventory: {
|
|
total: number;
|
|
inStock: number;
|
|
abnormal: number;
|
|
};
|
|
pendingDelivery: number;
|
|
weeklyNew: number;
|
|
weeklyRemoved: number;
|
|
weeklyDelivered: number;
|
|
weeklyReturned: number;
|
|
weeklyReplaced: number;
|
|
}
|
|
|
|
export interface BatchSummary {
|
|
batch: string;
|
|
total: number;
|
|
inventory: number;
|
|
inventoryRegions: Record<string, number>;
|
|
pending: number;
|
|
operating: number;
|
|
weeklyDelivered: number;
|
|
weeklyReturned: number;
|
|
weeklyReplaced: number;
|
|
}
|
|
|
|
export interface ModelSummary {
|
|
model: string;
|
|
total: number;
|
|
inventory: number;
|
|
inventoryRegions: Record<string, number>;
|
|
pending: number;
|
|
operating: number;
|
|
weeklyDelivered: number;
|
|
weeklyReturned: number;
|
|
weeklyReplaced: number;
|
|
batches: BatchSummary[];
|
|
}
|
|
|
|
export interface TypeSummary {
|
|
type: string;
|
|
totalAssets: number;
|
|
totalInventory: number;
|
|
totalOperating: number;
|
|
inventoryRegions: Record<string, number>;
|
|
pending: number;
|
|
weeklyDelivered: number;
|
|
weeklyReturned: number;
|
|
weeklyReplaced: number;
|
|
models: ModelSummary[];
|
|
}
|
|
|
|
export interface BatchGroup {
|
|
batch: string;
|
|
total: number;
|
|
inventory: number;
|
|
inventoryRegions: Record<string, number>;
|
|
pending: number;
|
|
operating: number;
|
|
weeklyDelivered: number;
|
|
weeklyReturned: number;
|
|
weeklyReplaced: number;
|
|
models: {
|
|
model: string;
|
|
type: string;
|
|
total: number;
|
|
inventory: number;
|
|
inventoryRegions: Record<string, number>;
|
|
pending: number;
|
|
operating: number;
|
|
weeklyDelivered: number;
|
|
weeklyReturned: number;
|
|
weeklyReplaced: number;
|
|
}[];
|
|
}
|
|
|
|
export interface InventoryTypeSummary {
|
|
type: string;
|
|
totalAssets: number;
|
|
totalInventory: number;
|
|
models: {
|
|
model: string;
|
|
totalAssets: number;
|
|
totalInventory: number;
|
|
regions: Record<string, number>;
|
|
}[];
|
|
regionSubtotals: Record<string, number>;
|
|
}
|
|
|
|
export interface VehicleListItem {
|
|
id: number;
|
|
plateNumber: string;
|
|
type: string;
|
|
model: string;
|
|
location: string;
|
|
province: string | null;
|
|
city: string | null;
|
|
status: string;
|
|
ownership: string;
|
|
contractNo: string | null;
|
|
customerName: string | null;
|
|
subjectOrg: string | null;
|
|
departmentName: string | null;
|
|
customerManager: string | null;
|
|
brandLabel: string | null;
|
|
orgName: string | null;
|
|
}
|
|
|
|
export interface RegionalInventoryStats {
|
|
region: string;
|
|
city: string;
|
|
brand: string;
|
|
type: string;
|
|
model: string;
|
|
batch: string;
|
|
quantity: number;
|
|
}
|
|
|
|
export interface ManagerStats {
|
|
manager: string;
|
|
department: string;
|
|
t4_5: number;
|
|
t4_5c: number;
|
|
t18: number;
|
|
t49: number;
|
|
trailer: number;
|
|
other: number;
|
|
total: number;
|
|
}
|
|
|
|
export interface DeptGroup {
|
|
department: string;
|
|
totalAssets: number;
|
|
operatingCount: number;
|
|
idleCount: number;
|
|
managers: ManagerStats[];
|
|
}
|
|
|
|
export interface RegionGroup {
|
|
region: string;
|
|
totalAssets: number;
|
|
operatingCount: number;
|
|
inventoryCount: number;
|
|
customers: string[];
|
|
typeBreakdown: { type: string; total: number; operating: number; inventory: number; customers: string[] }[];
|
|
}
|
|
|
|
export interface CustomerStats {
|
|
customer: string;
|
|
manager: string;
|
|
brand: string;
|
|
department: string;
|
|
region: string;
|
|
city: string;
|
|
t4_5: number;
|
|
t4_5c: number;
|
|
t18: number;
|
|
t49: number;
|
|
trailer: number;
|
|
other: number;
|
|
total: number;
|
|
}
|