feature/leandro/35-issue-delivery-note #36

Merged
leandro merged 5 commits from feature/leandro/35-issue-delivery-note into master 2026-03-24 13:15:21 +00:00
2 changed files with 45 additions and 0 deletions
Showing only changes of commit e0bc38d626 - Show all commits

View File

@ -49,4 +49,9 @@ public interface IDeliveryNoteDom
/// Puede estar vacía si no existen registros.
/// </returns>
Task<IEnumerable<DeliveryNoteDto>> GetDtosByQuoteIdAsync(int quoteId);
/// <summary>
/// Valida y prepara la emisión de un Delivery Note.
/// </summary>
Task<DeliveryNoteCreateResponse> CreateAndIssueDeliveryNoteAsync(DeliveryNoteCreateRequest request);
}

View File

@ -1,5 +1,6 @@
using Core.Interfaces;
using Domain.Dtos.Sales;
using Domain.Entities;
using Domain.Generics;
using Models.Interfaces;
@ -60,5 +61,44 @@ namespace Core.Services
return _deliveryNoteRepository.GetDtosByQuoteIdAsync(quoteId);
}
public Task<DeliveryNoteCreateResponse> CreateAndIssueDeliveryNoteAsync(DeliveryNoteCreateRequest request)
{
ArgumentNullException.ThrowIfNull(request);
if (string.IsNullOrWhiteSpace(request.DeliveryNoteNumber))
throw new ArgumentException("El número de remito es obligatorio.", nameof(request.DeliveryNoteNumber));
if (request.CustomerId <= 0)
throw new ArgumentException("Debe seleccionar un cliente.", nameof(request.CustomerId));
if (request.IssueDate == default)
throw new ArgumentException("La fecha de emisión es obligatoria.", nameof(request.IssueDate));
if (request.Items is null || request.Items.Count == 0)
throw new InvalidOperationException("Debe incluir al menos un ítem.");
if (request.Items.Any(i => i.Quantity <= 0))
throw new InvalidOperationException("Todas las cantidades deben ser mayores a cero.");
if (request.Items.Any(i => string.IsNullOrWhiteSpace(i.Description)))
throw new InvalidOperationException("Todos los ítems deben incluir descripción.");
var entity = new EDeliveryNote
{
DeliveryNoteNumber = request.DeliveryNoteNumber.Trim(),
QuoteId = request.QuoteId,
IssueDate = request.IssueDate,
CustomerId = request.CustomerId,
Observations = request.Observations,
ExtraInfoJson = request.ExtraInfoJson
};
return Task.FromResult(new DeliveryNoteCreateResponse
{
Id = entity.Id,
DeliveryNoteNumber = entity.DeliveryNoteNumber
});
}
}
}