feat(WEB): 절곡품 선생산→재고적재 Phase 3 - 수주 절곡 재고 현황 표시
- orders/actions: checkBendingStock() 서버 액션 추가 - orders/index: BendingStockItem 타입 및 함수 export - 수주 상세페이지: 절곡품 재고 현황 카드 (충족/부족 뱃지, 테이블) - 수주확정 이후 상태에서 자동 로드
This commit is contained in:
@@ -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로 조회)
|
||||
* 견적 상세페이지에서 수주등록 버튼 클릭 시 사용
|
||||
|
||||
@@ -15,8 +15,10 @@ export {
|
||||
createProductionOrder,
|
||||
revertProductionOrder,
|
||||
revertOrderConfirmation,
|
||||
checkBendingStock,
|
||||
getQuoteByIdForSelect,
|
||||
type Order,
|
||||
type BendingStockItem,
|
||||
type OrderItem as OrderItemApi,
|
||||
type OrderFormData as OrderApiFormData,
|
||||
type OrderItemFormData,
|
||||
|
||||
Reference in New Issue
Block a user