Files
wace_rps/frontend/lib/api/salesOrderMgmt.ts
T
hjjeong 13b4efd2fe 주문관리 그리드 V1 컬럼 보강(제품구분·국내해외·접수일) + wace 1:1 검증 문서·자동 검증 SQL
- getList SQL: 라인 집계에 product_summary 추가, PRODUCT_NAME을 COALESCE(line, header)로 변경 (운영 contract_mgmt.product NULL 패턴 대응)
- GRID_COLUMNS 3개 추가: 제품구분/국내해외/접수일 (wace 27/27 일치)
- OrderRow 타입: product_name / area_name 보강
- searchForm.search_partName 키 추가(초기화 포함, UI 이미 PartSelect mode=partName 존재)
- docs/migration/sales/02-order-verify.md: wace ↔ RPS 항목 매핑 / 운영 데이터 / 갭 처리 결과
- scripts/verify-order.sql: BEGIN/ROLLBACK 4개 시나리오 (그리드 V1 / G1 / 수주취소 / 채번) 자동 검증

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-11 09:35:11 +09:00

137 lines
4.0 KiB
TypeScript

import { apiClient } from "./client";
export interface OrderListFilter {
category_cd?: string;
search_poNo?: string;
customer_objid?: string;
search_partObjId?: string;
search_serialNo?: string;
contract_result?: string;
order_start_date?: string;
order_end_date?: string;
due_start_date?: string;
due_end_date?: string;
product?: string;
area_cd?: string;
paid_type?: string;
contract_currency?: string;
}
export interface OrderRow {
objid: string;
contract_no: string | null;
category_cd: string | null;
customer_objid: string | null;
customer_name: string | null;
product: string | null;
area_cd: string | null;
paid_type: string | null;
paid_type_name: string | null;
product_name: string | null;
area_name: string | null;
contract_currency: string | null;
exchange_rate: string | null;
po_no: string | null;
order_date: string | null;
receipt_date: string | null;
req_del_date: string | null;
contract_result: string | null;
order_supply_price_sum: string | null;
order_vat_sum: string | null;
order_total_amount_sum: string | null;
writer: string | null;
writer_name: string | null;
pm_user_id: string | null;
pm_user_name: string | null;
regdate: string | null;
order_quantity: number | null;
cancel_qty_sum: number | null;
has_order_data: number | null;
earliest_due_date: string | null;
other_due_date_count: number | null;
item_summary: string | null;
part_no: string | null;
serial_no: string | null;
order_appr_status: string | null;
amaranth_status: string | null;
cu01_cnt: number | null;
}
export interface OrderItem {
objid?: string;
seq: number;
part_objid: string;
part_no: string;
part_name: string;
quantity?: number;
due_date?: string;
customer_request?: string;
order_quantity?: string;
order_unit_price?: string;
order_supply_price?: string;
order_vat?: string;
order_total_amount?: string;
cancel_qty?: string;
return_reason?: string;
product?: string;
serials?: string[];
}
export interface OrderBody {
objid?: string;
contract_no?: string;
category_cd?: string;
customer_objid?: string;
product?: string;
area_cd?: string;
paid_type?: string;
contract_currency?: string;
exchange_rate?: string;
receipt_date?: string;
contract_date?: string;
req_del_date?: string;
po_no?: string;
contract_result?: string;
pm_user_id?: string;
customer_request?: string;
shipping_method?: string;
incoterms?: string;
items: OrderItem[];
}
export const salesOrderMgmtApi = {
async list(filter: OrderListFilter = {}) {
const res = await apiClient.get("/sales/order-mgmt/list", { params: filter });
return (res.data?.data ?? []) as OrderRow[];
},
async detail(objid: string) {
const res = await apiClient.get(`/sales/order-mgmt/${objid}`);
return res.data?.data;
},
async generateNumber(): Promise<string> {
const res = await apiClient.get("/sales/order-mgmt/generate-number");
return res.data?.data?.contractNo ?? "";
},
async create(body: OrderBody) {
const res = await apiClient.post("/sales/order-mgmt", body);
return res.data?.data as { objid: string; contract_no: string };
},
async update(objid: string, body: OrderBody) {
return (await apiClient.put(`/sales/order-mgmt/${objid}`, body)).data;
},
async remove(objid: string) {
return (await apiClient.delete(`/sales/order-mgmt/${objid}`)).data;
},
async setStatus(objid: string, contract_result: string) {
return (await apiClient.patch(`/sales/order-mgmt/${objid}/status`, { contract_result })).data;
},
// 라인별 cancel_qty 다중 UPDATE (wace saveOrderCancelQty 이식)
async saveCancelQty(objid: string, entries: { itemObjId: string; cancelQty: string | number; orderQty: string | number }[]) {
return (await apiClient.post(`/sales/order-mgmt/${objid}/cancel-qty`, { entries })).data;
},
async formView(objid: string): Promise<{ info: any; items: any[] }> {
const res = await apiClient.get(`/sales/order-mgmt/${objid}/form-view`);
return res.data?.data ?? { info: null, items: [] };
},
};