import { cache } from "react"; import "server-only"; // import { serverFetchJson } from "@/app/utils/fetchUtil"; // import { BASE_API_URL } from "@/config/api"; import { serverFetchJson } from "../../utils/fetchUtil"; import { BASE_API_URL } from "../../../config/api"; import { Uom } from "../settings/uom"; import { RecordsRes } from "../utils"; import { PutAwayLine } from "./actions"; import { StockInLine } from "../stockIn"; export enum StockInStatus { PENDING = "pending", RECEIVED = "received", APPROVED = "escalated", REJECTED = "rejected", COMPLETED = "completed", } export interface PoResult { id: number; code: string; orderDate: string; supplier: string; estimatedArrivalDate: string; completedDate: string; itemDetail?: string; itemCode?: string; itemName?: string; itemQty?: string; itemSumAcceptedQty?: string; itemUom?: string; escalated: boolean; status: string; pol?: PurchaseOrderLine[]; } export type { StockInLine } from "../stockIn"; export interface PurchaseOrderLine { id: number; purchaseOrderId: number; itemId: number; itemNo: string; itemName: string; qty: number; processed: number; receivedQty: number; uom: Uom; stockUom: StockUomForPoLine; price: number; status: string; stockInLine: StockInLine[]; } export interface StockUomForPoLine { id: number; stockUomCode: string; stockUomDesc: string; stockQty: number; stockRatioN: number; stockRatioD: number; purchaseRatioN: number; purchaseRatioD: number; } // DEPRECIATED export interface StockInLine_old { id: number; stockInId?: number; purchaseOrderId?: number; purchaseOrderLineId: number; itemId: number; itemNo: string; itemName: string; itemType: string; demandQty: number; acceptedQty: number; qty?: number; processed?: number; price?: number; priceUnit?: string; shelfLife?: number; receiptDate?: string; productionDate?: string; productLotNo?: string; expiryDate?: string; status: string; supplier?: string; lotNo?: string; poCode?: string; uom?: Uom; defaultWarehouseId: number; // id for now dnNo?: string; dnDate?: number[]; stockQty?: number; handlerId?: number; putAwayLines?: PutAwayLine[]; } export const fetchPoList = cache(async (queryParams?: Record) => { if (queryParams) { const queryString = new URLSearchParams(queryParams).toString(); return serverFetchJson>( `${BASE_API_URL}/po/list?${queryString}`, { method: "GET", next: { tags: ["po"] }, }, ); } else { return serverFetchJson>(`${BASE_API_URL}/po/list`, { method: "GET", next: { tags: ["po"] }, }); } }); export const fetchPoWithStockInLines = cache(async (id: number) => { return serverFetchJson(`${BASE_API_URL}/po/detail/${id}`, { next: { tags: ["po"] }, }); });