import { defaultGqlPermission, defaultPermission } from "@tailor-platform/erp-kit/core"; import { db, type TailorAnyDBType } from "@tailor-platform/sdk"; import { inventoryLedger } from "./inventoryLedger"; const builtins = (params: { itemType?: TailorAnyDBType; companyType?: TailorAnyDBType }) => { const itemId = db.uuid().description("Foreign key to Item"); const companyId = db.uuid().description("Foreign key to Company"); return { itemId: params.itemType ? itemId.relation({ type: "n-1", toward: { type: params.itemType, as: "item" }, backward: "costLayers", }) : itemId, companyId: params.companyType ? companyId.relation({ type: "n-1", toward: { type: params.companyType, as: "company" }, backward: "costLayers", }) : companyId, ledgerEntryId: db .uuid() .relation({ type: "n-1", toward: { type: inventoryLedger, as: "ledgerEntry" }, backward: "costLayers", }) .description("IN ledger entry that received the stock this layer tracks"), effectiveDate: db .date() .description("Movement date of the receipt; determines the FIFO consumption order"), quantity: db.decimal().description("Received quantity"), remainingQuantity: db.decimal().description("Unconsumed quantity"), }; }; export function createCostLayerType(params: { itemType?: TailorAnyDBType; companyType?: TailorAnyDBType; }) { return db .table("CostLayer", { ...builtins(params), ...db.fields.timestamps(), }) .indexes({ fields: ["itemId", "companyId", "effectiveDate"], name: "cost_layer_item_company_effective_idx", }) .permission(defaultPermission) .gqlPermission(defaultGqlPermission); } export const costLayer = createCostLayerType({});