leandro af635eadda
All checks were successful
CI/CD Pipeline / Build and Deploy with Docker Compose (pull_request) Successful in 6m37s
feat(sales): pantalla principal de consulta Delivery Note alineada a Quotes (#29)
- Se incorpora /deliverynotes con patrón visual idéntico a Quotes
- Se implementan filtros, tabla y paginación completa
- Se integra búsqueda con endpoint /api/deliverynote/search
- Se utiliza DeliveryNoteSearchParams desde Domain.Generics (sin duplicaciones)
- Se agregan placeholders para Nuevo, Excel y Ver
- Se incorpora navegación en menú

Closes #29
2026-03-21 12:53:53 -03:00

82 lines
2.8 KiB
C#

using Domain.Dtos.Sales;
using Domain.Generics;
using System.Net.Http.Json;
namespace phronCare.UIBlazor.Services.Sales.DeliveryNotes
{
public class DeliveryNoteService : IDeliveryNoteService
{
private readonly HttpClient _http;
public DeliveryNoteService(HttpClient http)
{
_http = http;
}
public async Task<PagedResult<DeliveryNoteSummaryDto>> SearchAsync(DeliveryNoteSearchParams searchParams)
{
var queryParams = new List<string>();
void AddParam(string key, string? value)
{
if (!string.IsNullOrWhiteSpace(value))
queryParams.Add($"{key}={Uri.EscapeDataString(value!)}");
}
AddParam("customerId", searchParams.CustomerId?.ToString());
AddParam("customerText", searchParams.CustomerText);
AddParam("deliveryNoteNumber", searchParams.DeliveryNoteNumber);
AddParam("quoteId", searchParams.QuoteId?.ToString());
AddParam("quoteNumber", searchParams.QuoteNumber);
AddParam("issueDateFrom", searchParams.IssueDateFrom?.ToString("o"));
AddParam("issueDateTo", searchParams.IssueDateTo?.ToString("o"));
AddParam("status", searchParams.Status);
AddParam("page", searchParams.Page.ToString());
AddParam("pageSize", searchParams.PageSize.ToString());
var url = "/api/deliverynote/search";
if (queryParams.Any())
url += "?" + string.Join("&", queryParams);
var result = await _http.GetFromJsonAsync<PagedResult<DeliveryNoteSummaryDto>>(url);
return result ?? new PagedResult<DeliveryNoteSummaryDto>();
}
public async Task<DeliveryNoteDto?> GetByIdAsync(int id)
{
try
{
return await _http.GetFromJsonAsync<DeliveryNoteDto>($"/api/deliverynote/{id}");
}
catch
{
return null;
}
}
public async Task<DeliveryNoteDto?> GetByDeliveryNoteNumberAsync(string deliveryNoteNumber)
{
try
{
return await _http.GetFromJsonAsync<DeliveryNoteDto>($"/api/deliverynote/number/{Uri.EscapeDataString(deliveryNoteNumber)}");
}
catch
{
return null;
}
}
public async Task<IEnumerable<DeliveryNoteDto>> GetByQuoteIdAsync(int quoteId)
{
try
{
return await _http.GetFromJsonAsync<IEnumerable<DeliveryNoteDto>>($"/api/deliverynote/by-quote/{quoteId}") ?? Enumerable.Empty<DeliveryNoteDto>();
}
catch
{
return Enumerable.Empty<DeliveryNoteDto>();
}
}
}
}