Compare commits
No commits in common. "36c3e26231be16dcb69572f5ce51fe44253a24c0" and "4d5045718f60567df786dbb09338f16722a15ff5" have entirely different histories.
36c3e26231
...
4d5045718f
@ -29,9 +29,6 @@ namespace Core.Services
|
|||||||
if (request.Coverage is null || request.Coverage.Count == 0)
|
if (request.Coverage is null || request.Coverage.Count == 0)
|
||||||
throw new InvalidOperationException("Debe incluir coverage.");
|
throw new InvalidOperationException("Debe incluir coverage.");
|
||||||
|
|
||||||
foreach (var detail in request.Details)
|
|
||||||
ValidateDetail(detail);
|
|
||||||
|
|
||||||
var netAmount = request.Details.Sum(x => x.NetAmount);
|
var netAmount = request.Details.Sum(x => x.NetAmount);
|
||||||
var taxAmount = request.Details.Sum(x => x.TaxAmount);
|
var taxAmount = request.Details.Sum(x => x.TaxAmount);
|
||||||
var totalAmount = request.Details.Sum(x => x.TotalAmount);
|
var totalAmount = request.Details.Sum(x => x.TotalAmount);
|
||||||
@ -68,9 +65,9 @@ namespace Core.Services
|
|||||||
PhSSalesDocumentDetails = request.Details.Select(x => new ESalesDocumentDetail
|
PhSSalesDocumentDetails = request.Details.Select(x => new ESalesDocumentDetail
|
||||||
{
|
{
|
||||||
LineNumber = x.LineNumber,
|
LineNumber = x.LineNumber,
|
||||||
OriginType = x.OriginType.ToStorageCode(),
|
OriginType = x.OriginType.ToString(),
|
||||||
OriginId = ResolveOriginId(x),
|
OriginId = x.OriginId,
|
||||||
QuoteDetailId = ResolveQuoteDetailId(x),
|
QuoteDetailId = x.QuoteDetailId,
|
||||||
ProductId = x.ProductId,
|
ProductId = x.ProductId,
|
||||||
Description = x.Description.Trim(),
|
Description = x.Description.Trim(),
|
||||||
Quantity = x.Quantity,
|
Quantity = x.Quantity,
|
||||||
@ -114,49 +111,5 @@ namespace Core.Services
|
|||||||
|
|
||||||
return _salesDocumentRepository.GetDtoByIdAsync(id);
|
return _salesDocumentRepository.GetDtoByIdAsync(id);
|
||||||
}
|
}
|
||||||
private static void ValidateDetail(SalesDocumentCreateDetailRequest detail)
|
|
||||||
{
|
|
||||||
if (detail.LineNumber <= 0)
|
|
||||||
throw new ArgumentException("El número de línea del detail debe ser mayor a cero.", nameof(detail.LineNumber));
|
|
||||||
|
|
||||||
if (!Enum.IsDefined(typeof(SalesDocumentOriginType), detail.OriginType))
|
|
||||||
throw new ArgumentException("El tipo de origen del detail no es válido.", nameof(detail.OriginType));
|
|
||||||
|
|
||||||
if (string.IsNullOrWhiteSpace(detail.Description))
|
|
||||||
throw new ArgumentException("La descripción del detail es obligatoria.", nameof(detail.Description));
|
|
||||||
|
|
||||||
if (detail.Quantity <= 0)
|
|
||||||
throw new ArgumentException("La cantidad del detail debe ser mayor a cero.", nameof(detail.Quantity));
|
|
||||||
|
|
||||||
var hasOriginId = detail.OriginId.HasValue && detail.OriginId.Value > 0;
|
|
||||||
var hasQuoteDetailId = detail.QuoteDetailId.HasValue && detail.QuoteDetailId.Value > 0;
|
|
||||||
|
|
||||||
if (detail.OriginType != SalesDocumentOriginType.Manual && !hasOriginId && !hasQuoteDetailId)
|
|
||||||
throw new ArgumentException("Debe informar OriginId o QuoteDetailId para trazabilidad del origen.", nameof(detail.OriginId));
|
|
||||||
|
|
||||||
if (detail.OriginType == SalesDocumentOriginType.QuoteDetail && !hasQuoteDetailId && !hasOriginId)
|
|
||||||
throw new ArgumentException("Debe informar QuoteDetailId u OriginId para líneas originadas en presupuesto.", nameof(detail.QuoteDetailId));
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int? ResolveOriginId(SalesDocumentCreateDetailRequest detail)
|
|
||||||
{
|
|
||||||
if (detail.OriginId.HasValue && detail.OriginId.Value > 0)
|
|
||||||
return detail.OriginId;
|
|
||||||
|
|
||||||
return detail.OriginType == SalesDocumentOriginType.QuoteDetail
|
|
||||||
? detail.QuoteDetailId
|
|
||||||
: null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static int? ResolveQuoteDetailId(SalesDocumentCreateDetailRequest detail)
|
|
||||||
{
|
|
||||||
if (detail.QuoteDetailId.HasValue && detail.QuoteDetailId.Value > 0)
|
|
||||||
return detail.QuoteDetailId;
|
|
||||||
|
|
||||||
return detail.OriginType == SalesDocumentOriginType.QuoteDetail
|
|
||||||
? detail.OriginId
|
|
||||||
: null;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,7 +5,6 @@ namespace Domain.Constants
|
|||||||
Manual = 1,
|
Manual = 1,
|
||||||
QuoteDetail = 2,
|
QuoteDetail = 2,
|
||||||
Adjustment = 3,
|
Adjustment = 3,
|
||||||
Capita = 4,
|
Capita = 4
|
||||||
DeliveryNote = 5
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,18 +0,0 @@
|
|||||||
namespace Domain.Constants
|
|
||||||
{
|
|
||||||
public static class SalesDocumentOriginTypeExtensions
|
|
||||||
{
|
|
||||||
public static string ToStorageCode(this SalesDocumentOriginType originType)
|
|
||||||
{
|
|
||||||
return originType switch
|
|
||||||
{
|
|
||||||
SalesDocumentOriginType.Manual => "MANUAL",
|
|
||||||
SalesDocumentOriginType.QuoteDetail => "QUOTE",
|
|
||||||
SalesDocumentOriginType.Adjustment => "ADJUSTMENT",
|
|
||||||
SalesDocumentOriginType.Capita => "CAPITA",
|
|
||||||
SalesDocumentOriginType.DeliveryNote => "DELIVERY_NOTE",
|
|
||||||
_ => throw new ArgumentOutOfRangeException(nameof(originType), originType, "Tipo de origen de documento de venta no soportado.")
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,11 +1,9 @@
|
|||||||
using Domain.Constants;
|
|
||||||
|
|
||||||
namespace Domain.Dtos.Sales
|
namespace Domain.Dtos.Sales
|
||||||
{
|
{
|
||||||
public class SalesDocumentCreateDetailRequest
|
public class SalesDocumentCreateDetailRequest
|
||||||
{
|
{
|
||||||
public int LineNumber { get; set; }
|
public int LineNumber { get; set; }
|
||||||
public SalesDocumentOriginType OriginType { get; set; }
|
public int OriginType { get; set; }
|
||||||
public int? OriginId { get; set; }
|
public int? OriginId { get; set; }
|
||||||
public int? QuoteDetailId { get; set; }
|
public int? QuoteDetailId { get; set; }
|
||||||
public int? ProductId { get; set; }
|
public int? ProductId { get; set; }
|
||||||
|
|||||||
@ -15,7 +15,7 @@ namespace Domain.Entities
|
|||||||
public int LineNumber { get; set; }
|
public int LineNumber { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Origen logico del item. Persistir como codigo semantico: MANUAL, QUOTE, DELIVERY_NOTE, CAPITA o ADJUSTMENT.
|
/// Origen logico del item: Manual, QuoteDetail, Adjustment u otro valor definido por Domain/Core.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string OriginType { get; set; } = null!;
|
public string OriginType { get; set; } = null!;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user