Files
GestionIntegralWeb/Backend/GestionIntegral.Api/Models/Dtos/Distribucion/CreateBulkEntradaSalidaCanillaDto.cs

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