// ============================================================ // 구매관리 — 7개 메뉴 그리드 API. // 백엔드: /api/purchase/{menu-path}, /api/purchase/options/{suppliers|users|projects} // ============================================================ import { apiClient } from "./client"; export interface PurchaseListFilter { year?: string; customer_objid?: string; customer_cd?: string; project_no?: string; part_no?: string; part_name?: string; part_spec?: string; partner_objid?: string; purchase_order_no?: string; proposal_no?: string; search_status?: string; writer?: string; request_user?: string; purchase_type?: string; part_type?: string; product_cd?: string; category_cd?: string; paid_type?: string; mail_send_yn?: string; delivery_status?: string; close_status?: string; sales_mng_user_id?: string; regdate_start?: string; regdate_end?: string; receipt_date_start?: string; receipt_date_end?: string; delivery_start_date?: string; delivery_end_date?: string; reg_start_date?: string; reg_end_date?: string; page?: number; page_size?: number; } export interface PurchaseListResponse { rows: T[]; totalCount: number; page: number; pageSize: number; } export interface OptionItem { code: string; label: string; } async function getList(path: string, filter: PurchaseListFilter): Promise> { const res = await apiClient.get(`/purchase/${path}`, { params: filter }); return res.data?.data as PurchaseListResponse; } export const purchaseApi = { // 그리드 7종 listPurchaseRequest: (f: PurchaseListFilter = {}) => getList("purchase-request", f), listQuotationRequest: (f: PurchaseListFilter = {}) => getList("quotation-request", f), listProposal: (f: PurchaseListFilter = {}) => getList("proposal", f), listInbound: (f: PurchaseListFilter = {}) => getList("inbound", f), listInboundByItem: (f: PurchaseListFilter = {}) => getList("inbound-by-item", f), listInboundByDate: (f: PurchaseListFilter = {}) => getList("inbound-by-date", f), listProjectStatus: (f: PurchaseListFilter = {}) => getList("project-status", f), listOrder: (f: PurchaseListFilter = {}) => getList("order-list", f), // 공통 옵션 async listSuppliers(): Promise { const r = await apiClient.get("/purchase/options/suppliers"); return (r.data?.data ?? []) as OptionItem[]; }, // 견적요청서 / 발주서 vendor (wace client_mng 매칭) async listVendors(): Promise { const r = await apiClient.get("/purchase/options/vendors"); return (r.data?.data ?? []) as OptionItem[]; }, async listUsers(): Promise { const r = await apiClient.get("/purchase/options/users"); return (r.data?.data ?? []) as OptionItem[]; }, async listProjects(): Promise { const r = await apiClient.get("/purchase/options/projects"); return (r.data?.data ?? []) as OptionItem[]; }, }; /** 년도 옵션 — wace 운영판 동일 (현재년도 ±4) */ export function getYearOptions(): OptionItem[] { const y = new Date().getFullYear(); const out: OptionItem[] = []; for (let i = y + 4; i >= y - 4; i--) { out.push({ code: String(i), label: String(i) }); } return out; }