Finalización de Reportes y arreglos varios de controles y comportamientos...

This commit is contained in:
2025-06-03 13:45:20 -03:00
parent 99532b03f1
commit 062cc05fd0
67 changed files with 4523 additions and 993 deletions

View File

@@ -1,38 +1,56 @@
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; } // Fecha común para todos los ítems
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>();
// 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)
public static ValidationResult? ValidateNoDuplicatePublicationsInItems(CreateBulkEntradaSalidaCanillaDto instanceToValidate, ValidationContext context)
{
if (dto.Items != null)
if (instanceToValidate == null)
{
var duplicatePublications = dto.Items
.GroupBy(item => item.IdPublicacion)
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)
.Select(group => group.Key)
.ToList();
if (duplicatePublications.Any())
if (duplicateGroups.Any())
{
return new ValidationResult($"No puede agregar la misma publicación varias veces. Publicaciones duplicadas: {string.Join(", ", duplicatePublications)}");
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;