Update Patch UI Authorize
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 6m22s
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (push) Successful in 6m22s
This commit is contained in:
parent
e276e9672c
commit
134e702273
@ -50,17 +50,31 @@ namespace Core.Services
|
||||
|
||||
public async Task<bool> AuthorizeQuoteAsync(int quoteId, List<QuoteAuthorizationDto> items)
|
||||
{
|
||||
var approvedDetails = items.Select(i => new EQuoteDetail
|
||||
if (items == null)
|
||||
throw new InvalidOperationException("No se recibieron ítems para autorizar.");
|
||||
|
||||
// Si no hay ítems aprobados, consideramos que es una anulación
|
||||
var approvedDetails = items
|
||||
.Where(i => i.Approved)
|
||||
.Select(i =>
|
||||
{
|
||||
if (!i.ApprovedQuantity.HasValue || !i.ApprovedUnitPrice.HasValue)
|
||||
throw new InvalidOperationException("Los ítems aprobados deben tener cantidad y precio válidos.");
|
||||
|
||||
return new EQuoteDetail
|
||||
{
|
||||
Id = i.Id,
|
||||
Approved = i.Approved,
|
||||
Approved = true,
|
||||
Approvedquantity = i.ApprovedQuantity,
|
||||
Approvedunitprice = i.ApprovedUnitPrice
|
||||
};
|
||||
}).ToList();
|
||||
|
||||
// Este llamado puede interpretar lista vacía como anulación completa
|
||||
return await _quoteRepository.AuthorizeQuoteAsync(quoteId, approvedDetails);
|
||||
}
|
||||
|
||||
|
||||
#region Validaciones QuoteCreate
|
||||
private void ValidateQuote(EQuoteHeader quote)
|
||||
{
|
||||
|
||||
@ -158,13 +158,13 @@ namespace phronCare.API.Controllers.Sales
|
||||
public async Task<IActionResult> AuthorizeQuote([FromBody] QuoteAuthorizationRequest request)
|
||||
{
|
||||
if (request == null || request.Items == null)
|
||||
return BadRequest("No se recibió información válida para autorizar o anular.");
|
||||
return BadRequest("No se recibió información válida para autorizar.");
|
||||
|
||||
var result = await _quoteService.AuthorizeQuoteAsync(request.QuoteId, request.Items);
|
||||
|
||||
return result
|
||||
? Ok(new { success = true, message = "Presupuesto procesado correctamente." })
|
||||
: BadRequest(new { success = false, message = "No se pudo procesar el presupuesto." });
|
||||
: BadRequest(new { success = false, message = "No se pudo autorizar el presupuesto." });
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
@ -176,21 +176,34 @@
|
||||
{
|
||||
var approvedItems = FormModel.Items
|
||||
.Where(i => i.Approved)
|
||||
.Select(i => new QuoteAuthorizationDto
|
||||
.ToList();
|
||||
|
||||
// Validación: todos los ítems aprobados deben tener cantidad y precio válidos
|
||||
var invalidItems = approvedItems
|
||||
.Where(i => !i.ApprovedQuantity.HasValue || i.ApprovedQuantity <= 0
|
||||
|| !i.ApprovedUnitPrice.HasValue || i.ApprovedUnitPrice <= 0)
|
||||
.ToList();
|
||||
|
||||
if (invalidItems.Any())
|
||||
{
|
||||
toast.ShowError("Hay ítems aprobados sin cantidad o precio válido.");
|
||||
return;
|
||||
}
|
||||
|
||||
var payload = new QuoteAuthorizationRequest
|
||||
{
|
||||
QuoteId = QuoteId,
|
||||
Items = approvedItems.Select(i => new QuoteAuthorizationDto
|
||||
{
|
||||
Id = i.Id,
|
||||
Approved = true,
|
||||
ApprovedQuantity = i.ApprovedQuantity,
|
||||
ApprovedUnitPrice = i.ApprovedUnitPrice
|
||||
})
|
||||
.ToList();
|
||||
|
||||
var payload = new QuoteAuthorizationRequest
|
||||
{
|
||||
QuoteId = QuoteId,
|
||||
Items = approvedItems
|
||||
}).ToList()
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
var success = await quoteService.AuthorizeQuoteAsync(payload);
|
||||
if (success)
|
||||
{
|
||||
@ -198,6 +211,7 @@
|
||||
toast.ShowInfo("Presupuesto anulado correctamente.");
|
||||
else
|
||||
toast.ShowSuccess("Presupuesto autorizado con éxito.");
|
||||
|
||||
nav.NavigateTo("/quotes");
|
||||
}
|
||||
else
|
||||
@ -205,6 +219,12 @@
|
||||
toast.ShowError("No se pudo procesar el presupuesto.");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
toast.ShowError($"Error inesperado: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void Cancel() => nav.NavigateTo("/quotes");
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user