61 lines
1.3 KiB
TypeScript
61 lines
1.3 KiB
TypeScript
import { apiClient } from "./client";
|
|
|
|
export interface EnrichedOrder {
|
|
sourceId: string;
|
|
orderNo: string;
|
|
partCode: string;
|
|
partName: string;
|
|
partnerName: string;
|
|
dueDate: string;
|
|
orderQty: number;
|
|
shipQty: number;
|
|
balanceQty: number;
|
|
}
|
|
|
|
export interface ExistingPlan {
|
|
id: number;
|
|
sourceId: string;
|
|
planQty: number;
|
|
planDate: string;
|
|
shipmentPlanNo: string;
|
|
status: string;
|
|
}
|
|
|
|
export interface AggregateResponse {
|
|
[partCode: string]: {
|
|
totalBalance: number;
|
|
totalPlanQty: number;
|
|
currentStock: number;
|
|
availableStock: number;
|
|
inProductionQty: number;
|
|
existingPlans: ExistingPlan[];
|
|
orders: EnrichedOrder[];
|
|
};
|
|
}
|
|
|
|
export interface BatchSavePlan {
|
|
sourceId: string;
|
|
planQty: number;
|
|
planDate?: string;
|
|
}
|
|
|
|
// ID만 전달 → 백엔드에서 소스 테이블 자동 감지 + JOIN
|
|
export async function getShippingPlanAggregate(ids: string[]) {
|
|
const res = await apiClient.get("/shipping-plan/aggregate", {
|
|
params: { ids: ids.join(",") },
|
|
});
|
|
return res.data as {
|
|
success: boolean;
|
|
data: AggregateResponse;
|
|
source: "master" | "detail";
|
|
};
|
|
}
|
|
|
|
export async function batchSaveShippingPlans(
|
|
plans: BatchSavePlan[],
|
|
source?: string
|
|
) {
|
|
const res = await apiClient.post("/shipping-plan/batch", { plans, source });
|
|
return res.data as { success: boolean; message?: string; data?: any };
|
|
}
|