namespace QMSDAL.DTO { // ───────────────────────────────────────────────────────────────────────── // TMATRIXOUTPUT — Traceability Output Lines (SET / FGSerial / MixOutputLot) // // SQL columns (QMS.sql Section 3): // MATRIXOUTPUTID, MATRIXID, SLNO, // OUTPUTLEVEL, ITEMID, SKUID, // LOTID, LOTQUANTITY, TENANTID // // New FK columns to be added via ALTER: // BOMLINEID → MBOMDETAIL.BOMLINEID (for QtyPer and BOM traceability) // LOTDETAILID → TLOTDETAIL.LOTDETAILID (populated after output posting) // // SetNumber rule: // The set number for each output row is stored in TLOT (new column SETNUMBER // on TLOT), NOT in TMATRIXOUTPUT. Read via TLOT join on LOTID. // ───────────────────────────────────────────────────────────────────────── public class MatrixOutputDTO { // ==================================================================== // PRIMARY / LINKING KEYS // ==================================================================== public int MatrixOutputId { get; set; } /// FK → TMATRIX.MATRIXID public int MatrixId { get; set; } public short SlNo { get; set; } // ==================================================================== // OUTPUT CLASSIFICATION (TMATRIXOUTPUT.OUTPUTLEVEL) // ==================================================================== /// 0=Set | 1=FGSerial | 2=MixOutputLot public byte OutputLevel { get; set; } public string? OutputLevelName { get; set; } // ==================================================================== // ITEM / SKU (TMATRIXOUTPUT.ITEMID / SKUID) // ==================================================================== /// FK → MITEM.ITEMID public int ItemId { get; set; } public string? ItemCode { get; set; } public string? ItemName { get; set; } /// FK → MSKU.SKUID public int SkuId { get; set; } public string? SkuCode { get; set; } public string? SkuName { get; set; } // ==================================================================== // BOM DETAIL LINK — new column BOMLINEID added to TMATRIXOUTPUT // ==================================================================== /// FK → MBOMDETAIL.BOMLINEID; -1 when not BOM-linked public int BomLineId { get; set; } = -1; // Display fields joined from MBOMDETAIL / MBOM /// FK → MBOM.BOMID — parent BOM header public int BomId { get; set; } = -1; public string? BomCode { get; set; } public string? BomName { get; set; } /// /// Quantity per production unit — MBOMDETAIL.QUANTITY /// Used to derive the planned output qty for each SET /// public decimal QtyPer { get; set; } /// MBOMDETAIL.WASTEPERCENTAGE public decimal WastePercentage { get; set; } /// FK → MUOM.UOMID — from MBOMDETAIL.UOMID public int UomId { get; set; } = -1; public string? UomName { get; set; } // ==================================================================== // LOT (TMATRIXOUTPUT.LOTID → TLOT) // Represents SET lot / FGSerial lot / MixOutputLot // ==================================================================== /// FK → TLOT.LOTID public int LotId { get; set; } = -1; // Display fields joined from TLOT public string? LotNumber { get; set; } /// TLOT.LOTDATE public DateTime? LotDate { get; set; } /// TLOT.LOTEXPIRYDATE public DateTime? LotExpiryDate { get; set; } /// TLOT.LOTTYPEID public int LotTypeId { get; set; } = -1; /// TLOT.STATUS public byte LotStatus { get; set; } /// TLOT.MRPRATE public decimal MrpRate { get; set; } /// TLOT.ITEMPOSTEDCOST public decimal ItemPostedCost { get; set; } /// /// Set number stored in TLOT.SETNUMBER (new column on TLOT). /// Sequential within the matrix (SETFROM … SETTO range). /// 0 for FGSerial and MixOutputLot rows. /// public int SetNumber { get; set; } // ==================================================================== // QUANTITY (TMATRIXOUTPUT.LOTQUANTITY) // ==================================================================== /// 1 for FGSerial | N for Set | actual qty for MixOutputLot public decimal LotQuantity { get; set; } = 1; /// Total required output quantity for the set range — same as LotQuantity × SetCount public decimal RequiredQty { get; set; } /// Quantity per production unit — MBOMDETAIL.QUANTITY public decimal QuantityPer { get; set; } /// Unit of measure code — MUOM.UOMCODE via MITEM.STOCKUOMID public string? UomCode { get; set; } // ==================================================================== // LOT DETAIL LINK — new column LOTDETAILID added to TMATRIXOUTPUT // Populated after the output lot is posted to TLOTDETAIL // ==================================================================== /// FK → TLOTDETAIL.LOTDETAILID; -1 before output is posted public int LotDetailId { get; set; } = -1; // Display fields joined from TLOTDETAIL /// TLOTDETAIL.OUID public int OuId { get; set; } = -1; /// TLOTDETAIL.STOREID public int StoreId { get; set; } = -1; public string? StoreName { get; set; } /// TLOTDETAIL.BINID public int BinId { get; set; } = -1; public string? BinName { get; set; } /// TLOTDETAIL.LOCATIONTYPE public byte? LocationType { get; set; } /// TLOTDETAIL.PARTYBRANCHID public int PartyBranchId { get; set; } = -1; /// TLOTDETAIL.GOODQUANTITY public decimal GoodQuantity { get; set; } /// TLOTDETAIL.REJECTEDQUANTITY public decimal RejectedQuantity { get; set; } /// TLOTDETAIL.REWORKQUANTITY public decimal ReworkQuantity { get; set; } /// TLOTDETAIL.OTHERQUANTITY public decimal OtherQuantity { get; set; } /// TLOTDETAIL.PLANNEDQUANTITY public decimal PlannedQuantity { get; set; } /// TLOTDETAIL.REFERENCENUMBER public string? ReferenceNumber { get; set; } /// TLOTDETAIL.REFERENCEDATE public DateTime? ReferenceDate { get; set; } /// TLOTDETAIL.STOCKLEDGERNUMBER public string? StockLedgerNumber { get; set; } /// TLOTDETAIL.STOCKLEDGERDATE public DateTime? StockLedgerDate { get; set; } /// TLOTDETAIL.STOCKPOSTTYPE public byte? StockPostType { get; set; } // ==================================================================== // STANDARD FIELDS // ==================================================================== public int TenantId { get; set; } public DateTime? CreatedOn { get; set; } public DateTime? ModifiedOn { get; set; } } }