feat(WEB): 절곡품 선생산→재고적재 Phase 3 - 수주 절곡 재고 현황 표시

- orders/actions: checkBendingStock() 서버 액션 추가
- orders/index: BendingStockItem 타입 및 함수 export
- 수주 상세페이지: 절곡품 재고 현황 카드 (충족/부족 뱃지, 테이블)
  - 수주확정 이후 상태에서 자동 로드
This commit is contained in:
2026-02-21 16:26:14 +09:00
parent f5fbe1efc8
commit b5f5ce591f
3 changed files with 239 additions and 7 deletions

View File

@@ -1144,6 +1144,64 @@ export async function revertOrderConfirmation(orderId: string): Promise<{
};
}
/**
* 절곡 BOM 품목 재고 현황 조회
*/
export interface BendingStockItem {
itemId: number;
itemCode: string;
itemName: string;
unit: string;
neededQty: number;
stockQty: number;
reservedQty: number;
availableQty: number;
shortfallQty: number;
status: 'sufficient' | 'insufficient';
}
export async function checkBendingStock(orderId: string): Promise<{
success: boolean;
data?: BendingStockItem[];
error?: string;
__authError?: boolean;
}> {
interface ApiBendingStockItem {
item_id: number;
item_code: string;
item_name: string;
unit: string;
needed_qty: number;
stock_qty: number;
reserved_qty: number;
available_qty: number;
shortfall_qty: number;
status: string;
}
const result = await executeServerAction<ApiBendingStockItem[]>({
url: buildApiUrl(`/api/v1/orders/${orderId}/bending-stock`),
errorMessage: '절곡 재고 현황 조회에 실패했습니다.',
});
if (result.__authError) return { success: false, __authError: true };
if (!result.success || !result.data) return { success: false, error: result.error };
const items: BendingStockItem[] = result.data.map((item) => ({
itemId: item.item_id,
itemCode: item.item_code,
itemName: item.item_name,
unit: item.unit,
neededQty: item.needed_qty,
stockQty: item.stock_qty,
reservedQty: item.reserved_qty,
availableQty: item.available_qty,
shortfallQty: item.shortfall_qty,
status: item.status as 'sufficient' | 'insufficient',
}));
return { success: true, data: items };
}
/**
* 수주 변환용 단일 견적 조회 (ID로 조회)
* 견적 상세페이지에서 수주등록 버튼 클릭 시 사용

View File

@@ -15,8 +15,10 @@ export {
createProductionOrder,
revertProductionOrder,
revertOrderConfirmation,
checkBendingStock,
getQuoteByIdForSelect,
type Order,
type BendingStockItem,
type OrderItem as OrderItemApi,
type OrderFormData as OrderApiFormData,
type OrderItemFormData,