59 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.ComponentModel.DataAnnotations;
 | |
| using System.Linq;
 | |
| 
 | |
| namespace GestionIntegral.Api.Dtos.Distribucion
 | |
| {
 | |
|     [CustomValidation(typeof(CreateBulkEntradaSalidaCanillaDto), nameof(ValidateNoDuplicatePublicationsInItems))]
 | |
|     public class CreateBulkEntradaSalidaCanillaDto
 | |
|     {
 | |
|         [Required(ErrorMessage = "El ID del canillita es obligatorio.")]
 | |
|         public int IdCanilla { get; set; }
 | |
| 
 | |
|         [Required(ErrorMessage = "La fecha del movimiento es obligatoria.")]
 | |
|         public DateTime Fecha { get; set; }
 | |
| 
 | |
|         [Required(ErrorMessage = "Debe haber al menos un ítem de movimiento.")]
 | |
|         [MinLength(1, ErrorMessage = "Debe agregar al menos una publicación.")]
 | |
|         // La validación de cada item se hará por los atributos en EntradaSalidaCanillaItemDto
 | |
|         public List<EntradaSalidaCanillaItemDto> Items { get; set; } = new List<EntradaSalidaCanillaItemDto>();
 | |
|         
 | |
|         public static ValidationResult? ValidateNoDuplicatePublicationsInItems(CreateBulkEntradaSalidaCanillaDto instanceToValidate, ValidationContext context)
 | |
|         {
 | |
|             if (instanceToValidate == null) 
 | |
|             {
 | |
|                 return new ValidationResult("El objeto principal de la solicitud es nulo.");
 | |
|             }
 | |
| 
 | |
|             if (instanceToValidate.Items == null) 
 | |
|             {
 | |
|                  return ValidationResult.Success; // O error si una lista nula de items es inválida
 | |
|             }
 | |
| 
 | |
|             if (instanceToValidate.Items.Any()) 
 | |
|             {
 | |
|                 if (instanceToValidate.Items.Any(item => item == null))
 | |
|                 {
 | |
|                     return new ValidationResult("La lista de ítems contiene entradas nulas.", new[] { nameof(Items) });
 | |
|                 }
 | |
| 
 | |
|                 var duplicateGroups = instanceToValidate.Items
 | |
|                     .Where(item => item.IdPublicacion != 0) // Considerar solo IDs válidos si 0 no lo es
 | |
|                     .GroupBy(item => item.IdPublicacion) 
 | |
|                     .Where(group => group.Count() > 1)
 | |
|                     .ToList();
 | |
| 
 | |
|                 if (duplicateGroups.Any())
 | |
|                 {
 | |
|                     var duplicatedIds = string.Join(", ", duplicateGroups.Select(g => g.Key));
 | |
|                     return new ValidationResult(
 | |
|                         $"No puede agregar la misma publicación varias veces. Publicaciones duplicadas IDs: {duplicatedIds}",
 | |
|                         new[] { nameof(Items) } 
 | |
|                     );
 | |
|                 }
 | |
|             }
 | |
|             return ValidationResult.Success;
 | |
|         }
 | |
|     }
 | |
| } |