using GB5Shared.ListQuery; namespace MMDAL.DTO.Allocation { // ───────────────────────────────────────────────────────────────────── // PendingAllocationListDTO – lean list result for pending-allocation grids // // Auto-properties (unlike the heavy AllocationNewDTO which uses backing // fields). Add columns here as FE grid requirements grow. // ───────────────────────────────────────────────────────────────────── public sealed class PendingAllocationListDTO { // ── Document identity ──────────────────────────────────────────── public int ObjectHeaderTypeId { get; set; } public int AllocationId { get; set; } // objectheaderid (source doc) public string? HeaderName { get; set; } public string? HeaderDate { get; set; } public string? RefNumber { get; set; } public string? RefDate { get; set; } public string? PartyReferenceNumber { get; set; } public string? PartyReferenceDate { get; set; } // ── Party ──────────────────────────────────────────────────────── public int PartyId { get; set; } public string? PartyName { get; set; } public int PartyBranchId { get; set; } public string? PartyBranchName { get; set; } // ── Item / SKU (AllItems variant only) ─────────────────────────── public int ItemId { get; set; } public string? ItemCode { get; set; } public string? ItemName { get; set; } public int SKUId { get; set; } public string? SKUCode { get; set; } public string? SKUName { get; set; } // ── Process (MultiProcess variant only) ────────────────────────── public int ProcessId { get; set; } // ── Quantities ─────────────────────────────────────────────────── public decimal PendingQuantity { get; set; } public decimal PendingRejectedQuantity { get; set; } public decimal PendingReworkQuantity { get; set; } public decimal PendingOtherQuantity { get; set; } // ── Allocation / audit ─────────────────────────────────────────── public string? AllocationName { get; set; } public string? LastModifiedOn { get; set; } public string? UserCode { get; set; } public string? UserName { get; set; } // ── Legacy / MM-specific ───────────────────────────────────────── public int MMDetailId { get; set; } public int WorkCenterId { get; set; } public string? DeliveryDate { get; set; } public int AmendmentSlNo { get; set; } public int TotalCount { get; set; } // window COUNT(*) OVER() } // ───────────────────────────────────────────────────────────────────── // Criteria — one class per query variant // // All criteria implement ICriteria (SearchText, OUId, PageSize, PageOffset). // [CriteriaField] maps CriteriaDTO FieldName values to typed properties. // Keys are case-insensitive; last value wins when duplicates exist. // ───────────────────────────────────────────────────────────────────── /// /// Criteria for fetching pending MM documents (OBJECTMMHEAD). /// Router discriminator: ObjectHeaderTypeId == EntityConstant.OBJECTMMHEAD (-1899997952) /// public sealed class PendingMMDocumentCriteria : IListCriteria { [CriteriaField("headername", "searchtext")] public string? SearchText { get; set; } [CriteriaField("ouid")] public int? OUId { get; set; } [CriteriaField("pagesize")] public int PageSize { get; set; } = 100; [CriteriaField("pageoffset")] public int PageOffset { get; set; } = 0; [CriteriaField("biztransactiontypeid")] public int? BizTypeId { get; set; } [CriteriaField("partyid")] public int[]? PartyIds { get; set; } [CriteriaField("partybranchid")] public int? PartyBranchId { get; set; } // Legacy MMHead.svc/MMHeadAllocation parity: DocumentId scopes to one specific // document (OBJECTHEADERID); BizTransactionClassId/Nature/StoreId narrow further. [CriteriaField("documentid")] public int? DocumentId { get; set; } [CriteriaField("biztransactionclassid")] public int? BizTransactionClassId { get; set; } [CriteriaField("nature")] public short? Nature { get; set; } [CriteriaField("storeid")] public int? StoreId { get; set; } // ── ISortable ──────────────────────────────────────────────────── [CriteriaField("sortby")] public string? SortBy { get; set; } [CriteriaField("sortdesc", IsFlag = true)] public bool SortDesc { get; set; } [CriteriaField("sortfields")] public string[]? SortFields { get; set; } // ── IPageable ──────────────────────────────────────────────────── [CriteriaField("cursorid")] public int? CursorId { get; set; } [CriteriaField("skipcount", IsFlag = true)] public bool SkipCount { get; set; } } /// /// Criteria for fetching all pending MM items (detailed line-level view). /// Router discriminator: ObjectHeaderTypeId == EntityConstant.OBJECTMMHEAD AND allitemsview == true /// public sealed class PendingMMAllItemsCriteria : IListCriteria { [CriteriaField("headername", "searchtext")] public string? SearchText { get; set; } [CriteriaField("ouid")] public int? OUId { get; set; } [CriteriaField("pagesize")] public int PageSize { get; set; } = 100; [CriteriaField("pageoffset")] public int PageOffset { get; set; } = 0; [CriteriaField("biztransactiontypeid")] public int? BizTypeId { get; set; } [CriteriaField("partyid")] public int[]? PartyIds { get; set; } [CriteriaField("itemid")] public int? ItemId { get; set; } // ── ISortable ──────────────────────────────────────────────────── [CriteriaField("sortby")] public string? SortBy { get; set; } [CriteriaField("sortdesc", IsFlag = true)] public bool SortDesc { get; set; } [CriteriaField("sortfields")] public string[]? SortFields { get; set; } // ── IPageable ──────────────────────────────────────────────────── [CriteriaField("cursorid")] public int? CursorId { get; set; } [CriteriaField("skipcount", IsFlag = true)] public bool SkipCount { get; set; } } /// /// Criteria for fetching pending indents (OBJECTINDENT). /// Router discriminator: ObjectHeaderTypeId == EntityConstant.OBJECTINDENT (-1899997569) /// public sealed class PendingIndentCriteria : IListCriteria { [CriteriaField("headername", "searchtext")] public string? SearchText { get; set; } [CriteriaField("ouid")] public int? OUId { get; set; } [CriteriaField("pagesize")] public int PageSize { get; set; } = 100; [CriteriaField("pageoffset")] public int PageOffset { get; set; } = 0; [CriteriaField("biztransactiontypeid")] public int? BizTypeId { get; set; } [CriteriaField("partyid")] public int[]? PartyIds { get; set; } // ── ISortable ──────────────────────────────────────────────────── [CriteriaField("sortby")] public string? SortBy { get; set; } [CriteriaField("sortdesc", IsFlag = true)] public bool SortDesc { get; set; } [CriteriaField("sortfields")] public string[]? SortFields { get; set; } // ── IPageable ──────────────────────────────────────────────────── [CriteriaField("cursorid")] public int? CursorId { get; set; } [CriteriaField("skipcount", IsFlag = true)] public bool SkipCount { get; set; } } /// /// Criteria for pending indents across multiple processes. /// Router discriminator: ObjectHeaderTypeId == EntityConstant.OBJECTINDENT AND multiprocess == true /// public sealed class PendingIndentMultiProcessCriteria : IListCriteria { [CriteriaField("headername", "searchtext")] public string? SearchText { get; set; } [CriteriaField("ouid")] public int? OUId { get; set; } [CriteriaField("pagesize")] public int PageSize { get; set; } = 100; [CriteriaField("pageoffset")] public int PageOffset { get; set; } = 0; [CriteriaField("biztransactiontypeid")] public int? BizTypeId { get; set; } [CriteriaField("processid")] public int[]? ProcessIds { get; set; } // ── ISortable ──────────────────────────────────────────────────── [CriteriaField("sortby")] public string? SortBy { get; set; } [CriteriaField("sortdesc", IsFlag = true)] public bool SortDesc { get; set; } [CriteriaField("sortfields")] public string[]? SortFields { get; set; } // ── IPageable ──────────────────────────────────────────────────── [CriteriaField("cursorid")] public int? CursorId { get; set; } [CriteriaField("skipcount", IsFlag = true)] public bool SkipCount { get; set; } } // ───────────────────────────────────────────────────────────────────── // Query records – one per variant, each carrying its typed criteria. // These are the tokens dispatched through IListDispatcher. // ───────────────────────────────────────────────────────────────────── public sealed record PendingMMDocumentsQuery(PendingMMDocumentCriteria Criteria) : IListQuery; public sealed record PendingMMAllItemsQuery(PendingMMAllItemsCriteria Criteria) : IListQuery; public sealed record PendingIndentsQuery(PendingIndentCriteria Criteria) : IListQuery; public sealed record PendingIndentMultiProcessQuery(PendingIndentMultiProcessCriteria Criteria) : IListQuery; }