feat(sales): add delivery note issue core method closes #35
This commit is contained in:
parent
f6bf3c61e8
commit
e0bc38d626
@ -49,4 +49,9 @@ public interface IDeliveryNoteDom
|
|||||||
/// Puede estar vacía si no existen registros.
|
/// Puede estar vacía si no existen registros.
|
||||||
/// </returns>
|
/// </returns>
|
||||||
Task<IEnumerable<DeliveryNoteDto>> GetDtosByQuoteIdAsync(int quoteId);
|
Task<IEnumerable<DeliveryNoteDto>> GetDtosByQuoteIdAsync(int quoteId);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valida y prepara la emisión de un Delivery Note.
|
||||||
|
/// </summary>
|
||||||
|
Task<DeliveryNoteCreateResponse> CreateAndIssueDeliveryNoteAsync(DeliveryNoteCreateRequest request);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
using Core.Interfaces;
|
using Core.Interfaces;
|
||||||
using Domain.Dtos.Sales;
|
using Domain.Dtos.Sales;
|
||||||
|
using Domain.Entities;
|
||||||
using Domain.Generics;
|
using Domain.Generics;
|
||||||
using Models.Interfaces;
|
using Models.Interfaces;
|
||||||
|
|
||||||
@ -60,5 +61,44 @@ namespace Core.Services
|
|||||||
|
|
||||||
return _deliveryNoteRepository.GetDtosByQuoteIdAsync(quoteId);
|
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
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user