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 { QcFormInput, QcResult } from "../qc"; import { EscalationResult } from "../escalation"; export enum StockInStatus { PENDING = "pending", RECEIVED = "received", APPROVED = "escalated", REJECTED = "rejected", COMPLETED = "completed", PARTIALLY_COMPLETED = "partially_completed", } export interface StockInLineInput { id?: number; itemId?: number; acceptedQty?: number; receivedQty?: number; status?: string; expiryDate?: string; productLotNo?: string; receiptDate?: string; dnDate?: number[]; dnNo?: string; } export interface StockInInput { stockInId?: number; poCode?: string; productLotNo?: string; dnNo?: string; dnDate?: string; itemName?: string; lotNo?: string; invoiceNo?: string; receiptDate: string; supplier?: string; acceptedQty: number; qty: number; receivedQty: number; acceptedWeight?: number; productionDate?: string; expiryDate: string; uom?: Uom; } 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 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; } export interface StockInLine { id: number; stockInId?: number; purchaseOrderId?: number; purchaseOrderLineId: number; jobOrderId: number; itemId: number; itemNo: string; itemName: string; itemType: string; demandQty: number; acceptedQty: number; qty?: number; receivedQty?: 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[]; qcResult?: QcResult[]; escResult?: EscalationResult[]; } export interface EscalationInput { status: string; remarks?: string; reason?: string; handlerId: number; productLotNo?: string; acceptedQty?: number; // this is the qty to be escalated // escalationQty: number } export interface PutAwayLine { id?: number qty: number warehouseId: number; warehouse: string; printQty: number; _isNew?: boolean; } export interface PutAwayInput { status: string; acceptedQty: number; warehouseId: number; putAwayLines: PutAwayLine[] } export type ModalFormInput = Partial< QcFormInput & StockInInput & PutAwayInput > & { escalationLog? : Partial };