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> SearchAsync(DeliveryNoteSearchParams searchParams) { var queryParams = new List(); 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>(url); return result ?? new PagedResult(); } public async Task GetByIdAsync(int id) { try { return await _http.GetFromJsonAsync($"/api/deliverynote/{id}"); } catch { return null; } } public async Task GetByDeliveryNoteNumberAsync(string deliveryNoteNumber) { try { return await _http.GetFromJsonAsync($"/api/deliverynote/number/{Uri.EscapeDataString(deliveryNoteNumber)}"); } catch { return null; } } public async Task> GetByQuoteIdAsync(int quoteId) { try { return await _http.GetFromJsonAsync>($"/api/deliverynote/by-quote/{quoteId}") ?? Enumerable.Empty(); } catch { return Enumerable.Empty(); } } public async Task CreateAndIssueAsync(DeliveryNoteCreateRequest request) { var response = await _http.PostAsJsonAsync("/api/deliverynote/issue", request); if (!response.IsSuccessStatusCode) { var serverMessage = await response.Content.ReadAsStringAsync(); throw new Exception(string.IsNullOrWhiteSpace(serverMessage) ? "No se pudo emitir el remito." : serverMessage); } var result = await response.Content.ReadFromJsonAsync(); return result ?? throw new Exception("Respuesta vacĂ­a del servidor."); } } }