145 lines
5.9 KiB
C#
145 lines
5.9 KiB
C#
using System.Net;
|
|
using System.Web;
|
|
using OrdersManagement.Models;
|
|
using SytelineSaAppEfDataModel.Dtos;
|
|
|
|
namespace OrdersManagement.Services;
|
|
|
|
public class WarehouseService(IHttpClientFactory httpClientFactory)
|
|
{
|
|
private readonly HttpClient _httpClient = httpClientFactory.CreateClient("FaKrosnoApi");
|
|
|
|
public async Task<WzHeaderDto> GetWzHeaderByIdAsync(Guid wzHeaderId)
|
|
{
|
|
var response = await _httpClient.GetAsync($"api/WzHeader/by-id?id={wzHeaderId}");
|
|
response.EnsureSuccessStatusCode();
|
|
return await response.Content.ReadFromJsonAsync<WzHeaderDto>();
|
|
}
|
|
|
|
public async Task<IEnumerable<WzClientDto>> GetAllClientsAsync()
|
|
{
|
|
var response = await _httpClient.GetAsync($"api/WzClient");
|
|
response.EnsureSuccessStatusCode();
|
|
return await response.Content.ReadFromJsonAsync<IEnumerable<WzClientDto>>();
|
|
}
|
|
|
|
public async Task<IEnumerable<MaterialTransactionDto>> GetAllClientWzsAsync(string customerNumber, int customerSequence)
|
|
{
|
|
var response = await _httpClient.GetAsync(
|
|
$"api/WzHeader/by-customer-number?customerNumber={customerNumber}&customerSequence={customerSequence}");
|
|
response.EnsureSuccessStatusCode();
|
|
return await response.Content.ReadFromJsonAsync<IEnumerable<MaterialTransactionDto>>();
|
|
}
|
|
|
|
public async Task<MaterialTransactionDto?> GetMaterialTransactionByPartNumberAsync(string partNumber)
|
|
{
|
|
string encodedPartNumber = HttpUtility.UrlEncode(partNumber);
|
|
var response = await _httpClient.GetAsync(
|
|
$"api/WzRowMeyle/by-part-number?partNumber={encodedPartNumber}").ConfigureAwait(false);;
|
|
|
|
if (response.StatusCode == HttpStatusCode.NoContent)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return await response.Content.ReadFromJsonAsync<MaterialTransactionDto>().ConfigureAwait(false);;
|
|
}
|
|
|
|
public async Task<IEnumerable<WzHeaderDto>> GetAllClientWzHeadersAsync(string customerNumber, int customerSequence)
|
|
{
|
|
var response = await _httpClient.GetAsync(
|
|
$"api/WzHeader/all-wz-headers?customerNumber={customerNumber}&customerSequence={customerSequence}");
|
|
response.EnsureSuccessStatusCode();
|
|
return await response.Content.ReadFromJsonAsync<IEnumerable<WzHeaderDto>>();
|
|
}
|
|
|
|
public async Task CreateWzHeaderAsync(WzHeaderDto wzHeader)
|
|
{
|
|
var response = await _httpClient.PostAsJsonAsync("api/WzHeader", wzHeader);
|
|
response.EnsureSuccessStatusCode();
|
|
if (response.StatusCode != System.Net.HttpStatusCode.Created)
|
|
{
|
|
throw new Exception("Failed to create WzHeader");
|
|
}
|
|
}
|
|
|
|
public async Task CreateWzRowsMeyleAsync(IEnumerable<WzRowMeyleDto> wzRowMeyles)
|
|
{
|
|
if (wzRowMeyles == null || !wzRowMeyles.Any())
|
|
{
|
|
throw new ArgumentException("No rows provided to create.");
|
|
}
|
|
|
|
var response = await _httpClient.PostAsJsonAsync("api/WzRowMeyle", wzRowMeyles);
|
|
if (!response.IsSuccessStatusCode)
|
|
{
|
|
var errorContent = await response.Content.ReadAsStringAsync();
|
|
throw new HttpRequestException($"Failed to create WzRowMeyle: {response.StatusCode}, Content: {errorContent}");
|
|
}
|
|
|
|
}
|
|
|
|
public async Task<CustomerOrderDto> GetCustomerOrder(string customerOrderNumber)
|
|
{
|
|
var response = await _httpClient.GetAsync(
|
|
$"api/CustomerOrders/by-co-number/?customerOrderNumber={customerOrderNumber}");
|
|
response.EnsureSuccessStatusCode();
|
|
return await response.Content.ReadFromJsonAsync<CustomerOrderDto>();
|
|
}
|
|
|
|
public async Task<ItemCustDto> GetItem(string itemNumber, string customerNumber)
|
|
{
|
|
var response = await _httpClient.GetAsync(
|
|
$"api/ItemCust?itemNumber={itemNumber}&customerNumber={customerNumber}");
|
|
response.EnsureSuccessStatusCode();
|
|
return await response.Content.ReadFromJsonAsync<ItemCustDto>();
|
|
}
|
|
|
|
public async Task<IEnumerable<WzRowMeyleDto>> GetWzRowsByWzHeaderId(Guid wzHeaderId)
|
|
{
|
|
var response = await _httpClient.GetAsync($"api/WzRowMeyle/by-wz-header-id?wzHeaderId={wzHeaderId}");
|
|
response.EnsureSuccessStatusCode();
|
|
return await response.Content.ReadFromJsonAsync<IEnumerable<WzRowMeyleDto>>();
|
|
}
|
|
|
|
public async Task<IDictionary<string, List<TransactionModel>>> GetTransactionsModels()
|
|
{
|
|
var response = await _httpClient.GetAsync($"api/WzRowMeyle/transactions-with-part-number");
|
|
response.EnsureSuccessStatusCode();
|
|
IEnumerable<MaterialTransactionDto> materialTransactions =
|
|
await response.Content.ReadFromJsonAsync<IEnumerable<MaterialTransactionDto>>();
|
|
|
|
return materialTransactions.GroupBy(x => x.NR_KARTY_KONTROLNEJ).ToDictionary(x => x.Key ?? "",
|
|
y => y.Select(z => new TransactionModel() { ItemNumber = z.Item, PartNumber = z.NR_KARTY_KONTROLNEJ, Quantity = z.Qty }).ToList());
|
|
}
|
|
|
|
public async Task UpdateWzRowsMeyleAsync(IEnumerable<WzRowMeyleDto?> wzRowsMeyle)
|
|
{
|
|
if (wzRowsMeyle == null || !wzRowsMeyle.Any())
|
|
{
|
|
throw new ArgumentException("No rows provided to update.");
|
|
}
|
|
|
|
var response = await _httpClient.PutAsJsonAsync("api/WzRowMeyle", wzRowsMeyle);
|
|
response.EnsureSuccessStatusCode();
|
|
}
|
|
|
|
public async Task GenerateXlsForMeyleAsync(Guid wzHeaderId)
|
|
{
|
|
var response = await _httpClient.GetAsync($"api/ExcelGenerator/generate-meyle?packListId={wzHeaderId}");
|
|
response.EnsureSuccessStatusCode();
|
|
if (response.StatusCode != System.Net.HttpStatusCode.OK)
|
|
{
|
|
throw new Exception("Failed to generate XLS for Mayle");
|
|
}
|
|
}
|
|
|
|
public async Task AddEmailsToWzHeaderAsync(Guid wzHeaderId, string? emailAddresses)
|
|
{
|
|
var response = await _httpClient.PostAsJsonAsync(
|
|
$"api/WzHeader/add-emails?id={wzHeaderId}",
|
|
emailAddresses);
|
|
|
|
response.EnsureSuccessStatusCode();
|
|
}
|
|
} |