From c674ac66d927d85a97bfce3180fed1582f68680b Mon Sep 17 00:00:00 2001 From: javiermengual Date: Fri, 30 Jan 2026 16:52:28 +0100 Subject: [PATCH] fix: las facturas ahora devuelven tmb el nombre del cliente. --- DoliMiddlewareApi/Dtos/query/InvoiceDto.cs | 4 +-- DoliMiddlewareApi/Services/InvoiceService.cs | 26 ++++++++++++++++++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/DoliMiddlewareApi/Dtos/query/InvoiceDto.cs b/DoliMiddlewareApi/Dtos/query/InvoiceDto.cs index d2cb2b5..23d4f75 100644 --- a/DoliMiddlewareApi/Dtos/query/InvoiceDto.cs +++ b/DoliMiddlewareApi/Dtos/query/InvoiceDto.cs @@ -10,7 +10,5 @@ public class InvoiceDto public decimal? Total { get; set; } public decimal? RemainToPay { get; set; } public string Status { get; set; } - - - + public string? ClientName { get; set; } } \ No newline at end of file diff --git a/DoliMiddlewareApi/Services/InvoiceService.cs b/DoliMiddlewareApi/Services/InvoiceService.cs index c034df1..ca36309 100644 --- a/DoliMiddlewareApi/Services/InvoiceService.cs +++ b/DoliMiddlewareApi/Services/InvoiceService.cs @@ -36,9 +36,22 @@ public class InvoiceService(IDolibarrApiClient apiClient) var filter = $"(t.ref:like:'{search}%')"; endpoint += $"&sqlfilters={Uri.EscapeDataString(filter)}"; } - + var dataList = await apiClient.GetCollectionAsync(endpoint); - return dataList.Select(InvoiceMapper.MapToInvoiceDto).ToList(); + var invoices = dataList.Select(InvoiceMapper.MapToInvoiceDto).ToList(); + + if (invoices.Count == 0) + return invoices; + + var clientIds = invoices.Select(i => i.ClientId).Distinct().ToList(); + var clientNames = await GetClientNamesAsync(clientIds); + + foreach (var invoice in invoices) + { + invoice.ClientName = clientNames.GetValueOrDefault(invoice.ClientId); + } + + return invoices; } public async Task CreateInvoiceAsync(CreateInvoiceDto dto) @@ -102,4 +115,13 @@ public class InvoiceService(IDolibarrApiClient apiClient) await apiClient.PutAsync($"invoices/{id}", current); } + + private async Task> GetClientNamesAsync(List clientIds) + { + var uniqueIds = clientIds.Distinct().ToList(); + var tasks = uniqueIds.Select(id => apiClient.GetResourceAsync($"thirdparties/{id}")); + var clients = await Task.WhenAll(tasks); + return clients.Where(c => c is { id: not null }) + .ToDictionary(c => int.Parse(c!.id!), c => c!.name ?? ""); + } }