41 lines
1.7 KiB
C#
41 lines
1.7 KiB
C#
|
|
using System;
|
||
|
|
using System.Collections.Generic;
|
||
|
|
using System.ComponentModel.DataAnnotations;
|
||
|
|
|
||
|
|
namespace GestionIntegral.Api.Dtos.Distribucion
|
||
|
|
{
|
||
|
|
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; } // Fecha común para todos los ítems
|
||
|
|
|
||
|
|
[Required(ErrorMessage = "Debe haber al menos un ítem de movimiento.")]
|
||
|
|
[MinLength(1, ErrorMessage = "Debe agregar al menos una publicación.")]
|
||
|
|
public List<EntradaSalidaCanillaItemDto> Items { get; set; } = new List<EntradaSalidaCanillaItemDto>();
|
||
|
|
|
||
|
|
// Validar que no haya publicaciones duplicadas en la lista de items
|
||
|
|
[CustomValidation(typeof(CreateBulkEntradaSalidaCanillaDto), nameof(ValidateNoDuplicatePublications))]
|
||
|
|
public string? DuplicateError { get; set; }
|
||
|
|
|
||
|
|
public static ValidationResult? ValidateNoDuplicatePublications(CreateBulkEntradaSalidaCanillaDto dto, ValidationContext context)
|
||
|
|
{
|
||
|
|
if (dto.Items != null)
|
||
|
|
{
|
||
|
|
var duplicatePublications = dto.Items
|
||
|
|
.GroupBy(item => item.IdPublicacion)
|
||
|
|
.Where(group => group.Count() > 1)
|
||
|
|
.Select(group => group.Key)
|
||
|
|
.ToList();
|
||
|
|
|
||
|
|
if (duplicatePublications.Any())
|
||
|
|
{
|
||
|
|
return new ValidationResult($"No puede agregar la misma publicación varias veces. Publicaciones duplicadas: {string.Join(", ", duplicatePublications)}");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return ValidationResult.Success;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|