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