namespace QMSDAL.DTO { // ── Result returned by MatrixBLL.ValidateIssue ──────────────────────────── public class ValidateIssueResultDTO { // ───────────────────────────────────────────── // CORE STATUS // ───────────────────────────────────────────── public bool IsAllowed { get; set; } public string Status => IsAllowed ? "SUCCESS" : "ERROR"; public string Title => IsAllowed ? "Issue Allowed" : "Issue Blocked"; public string? Message { get; set; } // ───────────────────────────────────────────── // QUANTITY BREAKDOWN (VERY IMPORTANT FOR USERS) // ───────────────────────────────────────────── public decimal AllocatedQty { get; set; } public decimal ConsumedQty { get; set; } public decimal AvailableQty { get; set; } public decimal RequestedQty { get; set; } // ───────────────────────────────────────────── // HUMAN READABLE SUMMARY // ───────────────────────────────────────────── public string? Summary { get; set; } // ───────────────────────────────────────────── // FACTORY METHODS // ───────────────────────────────────────────── public static ValidateIssueResultDTO Allow( string message = "Issue is allowed.", decimal allocated = 0, decimal consumed = 0, decimal available = 0, decimal requested = 0) => new() { IsAllowed = true, Message = message, AllocatedQty = allocated, ConsumedQty = consumed, AvailableQty = available, RequestedQty = requested, Summary = requested > 0 ? $"You are issuing {requested} units." : "Issue is allowed." }; public static ValidateIssueResultDTO Block( string reason, decimal allocated = 0, decimal consumed = 0, decimal available = 0, decimal requested = 0) => new() { IsAllowed = false, Message = reason, AllocatedQty = allocated, ConsumedQty = consumed, AvailableQty = available, RequestedQty = requested, Summary = $"Cannot proceed: {reason}" }; } }