import { serverFetchJson } from "@/app/utils/fetchUtil"; import { BASE_API_URL } from "@/config/api"; import { cache } from "react"; import "server-only"; export type ScheduleType = "all" | "rough" | "detailed" | "manual"; // Rough export interface RoughProdScheduleResult { id: number; scheduleAt: number[]; schedulePeriod: number[]; schedulePeriodTo: number[]; totalEstProdCount: number; totalFGType: number; type: string; prodScheduleLinesByFg: RoughProdScheduleLineResultByFg[]; prodScheduleLinesByFgByDate: { [assignDate: number]: RoughProdScheduleLineResultByFg[]; }; prodScheduleLinesByBom: RoughProdScheduleLineResultByBom[]; prodScheduleLinesByBomByDate: { [assignDate: number]: RoughProdScheduleLineResultByBomByDate[]; }; } export interface RoughProdScheduleLineResultByFg { id: number; code: string; name: string; type: string; availableQty: number; prodQty: number; uomName: string; lastMonthAvgSales: number; estCloseBal: number; priority: number; assignDate: number; bomMaterials: RoughProdScheduleLineBomMaterialResult[]; } export interface RoughProdScheduleLineBomMaterialResult { id: number; code: string; name: string; type: string; availableQty: number; demandQty: number; uomName: string; } export interface RoughProdScheduleLineResultByBom { id: number; code: string; name: string; type: string; availableQty: number; totalDemandQty: number; demandQty1: number; demandQty2: number; demandQty3: number; demandQty4: number; demandQty5: number; demandQty6: number; demandQty7: number; uomName: string; } export interface RoughProdScheduleLineResultByBomByDate { id: number; code: string; name: string; type: string; availableQty: number; demandQty: number; assignDate: number; uomName: string; } // Detailed export interface DetailedProdScheduleResult { id: number; scheduleAt: number[]; totalEstProdCount: number; totalFGType: number; prodScheduleLines: DetailedProdScheduleLineResult[]; } export interface DetailedProdScheduleLineResult { id: number; bomMaterials: DetailedProdScheduleLineBomMaterialResult[]; jobNo: string; code: string; name: string; type: string; demandQty: number; bomOutputQty: number; uomName: string; prodTimeInMinute: DetailedProdScheduleLineProdTimeResult[]; priority: number; approved: boolean; proportion: number; } export interface DetailedProdScheduleLineBomMaterialResult { id: number; code: string; name: string; type: string; availableQty: number; demandQty: number; uomName: string; } export interface DetailedProdScheduleLineProdTimeResult { equipName: string; totalMinutes: number; } // API export const fetchRoughProdScheduleDetail = cache(async (id: number) => { return serverFetchJson(`${BASE_API_URL}/productionSchedule/detail/rough/${id}`, { method: "GET", headers: { "Content-Type": "application/json" }, next: { tags: ["prodSchedule"] } }) }) export const fetchDetailedProdScheduleDetail = cache(async (id: number) => { return serverFetchJson(`${BASE_API_URL}/productionSchedule/detail/detailed/${id}`, { method: "GET", headers: { "Content-Type": "application/json" }, next: { tags: ["prodSchedule"] } }) })