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;
}