feat: Nuevos mappers para transformar en
InvoiceDetailDto y cada una se sus InvoiceLinesDto
This commit is contained in:
parent
b2427a3276
commit
1d7182145e
|
|
@ -2,6 +2,7 @@ using System.Globalization;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http.Json;
|
using System.Net.Http.Json;
|
||||||
using DoliMiddlewareApi.Dtos;
|
using DoliMiddlewareApi.Dtos;
|
||||||
|
using DoliMiddlewareApi.Dtos.Dolibarr;
|
||||||
using DoliMiddlewareApi.Exceptions;
|
using DoliMiddlewareApi.Exceptions;
|
||||||
|
|
||||||
namespace DoliMiddlewareApi.Services;
|
namespace DoliMiddlewareApi.Services;
|
||||||
|
|
@ -16,12 +17,12 @@ public class DolibarrApiClient
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===== FACTURAS =====
|
// ===== FACTURAS =====
|
||||||
public async Task<InvoiceDto> GetInvoiceAsync(int id)
|
public async Task<InvoiceDetailDto> GetInvoiceAsync(int id)
|
||||||
{
|
{
|
||||||
var data = await GetAsync<InvoiceResponse>($"invoices/{id}");
|
var data = await GetAsync<InvoiceDetailResponse>($"invoices/{id}");
|
||||||
return MapToInvoiceDto(data);
|
return MapToInvoiceDetailDto(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<InvoiceDto>> GetInvoicesAsync(
|
public async Task<List<InvoiceDto>> GetInvoicesAsync(
|
||||||
int limit = 50,
|
int limit = 50,
|
||||||
int page = 1,
|
int page = 1,
|
||||||
|
|
@ -69,6 +70,43 @@ public class DolibarrApiClient
|
||||||
Status = ConvertStatusToWord(invoiceResponse.statut)
|
Status = ConvertStatusToWord(invoiceResponse.statut)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
private InvoiceDetailDto MapToInvoiceDetailDto(InvoiceDetailResponse data)
|
||||||
|
{
|
||||||
|
// Mapear campos base de la factura
|
||||||
|
var baseDto = MapToInvoiceDto(data);
|
||||||
|
|
||||||
|
return new InvoiceDetailDto
|
||||||
|
{
|
||||||
|
Id = baseDto.Id,
|
||||||
|
Number = baseDto.Number,
|
||||||
|
Date = baseDto.Date,
|
||||||
|
ExpireDate = baseDto.ExpireDate,
|
||||||
|
ClientId = baseDto.ClientId,
|
||||||
|
Total = baseDto.Total,
|
||||||
|
RemainToPay = baseDto.RemainToPay,
|
||||||
|
Status = baseDto.Status,
|
||||||
|
|
||||||
|
Lines = data.Lines?.Select(MapToInvoiceLineDto).ToList() ?? new List<InvoiceLineDto>()
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private InvoiceLineDto MapToInvoiceLineDto(InvoiceLineResponse lineResponse)
|
||||||
|
{
|
||||||
|
return new InvoiceLineDto
|
||||||
|
{
|
||||||
|
Id = int.TryParse(lineResponse.id, out int id) ? id : 0,
|
||||||
|
Description = lineResponse.description ?? lineResponse.desc ?? "",
|
||||||
|
Quantity = decimal.TryParse(lineResponse.qty, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal qty)
|
||||||
|
? qty : 0,
|
||||||
|
UnitPrice = decimal.TryParse(lineResponse.subprice, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal price)
|
||||||
|
? Math.Round(price, 2) : 0,
|
||||||
|
TaxRate = decimal.TryParse(lineResponse.tva_tx, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal tax)
|
||||||
|
? Math.Round(tax, 2) : 0,
|
||||||
|
Total = decimal.TryParse(lineResponse.total_ttc, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal total)
|
||||||
|
? Math.Round(total, 2) : 0
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static string ConvertStatusToWord(string? statusNumber)
|
private static string ConvertStatusToWord(string? statusNumber)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue