using System; using System.ComponentModel.DataAnnotations; namespace GestionIntegral.Api.Dtos.Distribucion { [CustomValidation(typeof(EntradaSalidaCanillaItemDto), nameof(ValidateCantidadesItem))] // Aplicar a nivel de clase public class EntradaSalidaCanillaItemDto { [Required(ErrorMessage = "El ID de la publicación es obligatorio.")] [Range(1, int.MaxValue, ErrorMessage = "El ID de la publicación debe ser válido.")] // Asegurar que no sea 0 public int IdPublicacion { get; set; } [Required(ErrorMessage = "La cantidad de salida es obligatoria.")] [Range(0, int.MaxValue, ErrorMessage = "La cantidad de salida debe ser un número positivo o cero.")] public int CantSalida { get; set; } [Required(ErrorMessage = "La cantidad de entrada es obligatoria.")] [Range(0, int.MaxValue, ErrorMessage = "La cantidad de entrada debe ser un número positivo o cero.")] public int CantEntrada { get; set; } [StringLength(150)] public string? Observacion { get; set; } // Ya no necesitamos la propiedad CantidadesError para esta validación // public string? CantidadesError { get; set; } public static ValidationResult? ValidateCantidadesItem(EntradaSalidaCanillaItemDto instanceToValidate, ValidationContext context) { if (instanceToValidate == null) { // Aunque el model binder debería crear la instancia, verificamos return ValidationResult.Success; // O un error si una instancia nula es inválida por sí misma } if (instanceToValidate.CantEntrada > instanceToValidate.CantSalida) { // Asociar el error a ambas propiedades podría ser útil en la UI return new ValidationResult( "La cantidad de entrada (devolución) no puede ser mayor a la cantidad de salida (retiro).", new[] { nameof(CantEntrada), nameof(CantSalida) } ); } return ValidationResult.Success; } } }