using CPRNIMS.Domain.UIContracts.Common; using CPRNIMS.Domain.UIContracts.Receiving; using CPRNIMS.Infrastructure.Helper; using CPRNIMS.Infrastructure.Models.Account; using CPRNIMS.Infrastructure.Models.Common; using CPRNIMS.Infrastructure.ViewModel.Receiving; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.Json; using System.Threading.Tasks; namespace CPRNIMS.Domain.UIServices.Receiving { public class Receiving : IReceiving { private readonly IConfiguration _configuration; private readonly TokenHelper _tokenHelper; private readonly IApiConfigurationService _apiConfigurationService; public Receiving(IConfiguration configuration, TokenHelper tokenHelper, IApiConfigurationService apiConfigurationService) { _configuration = configuration; _tokenHelper = tokenHelper; _apiConfigurationService = apiConfigurationService; } #region SendRequest service public async Task SendPostApiRequest(User user, ReceivingVM viewModel, string apiEndpoint) { var token = await _tokenHelper.GetJwtTokenAsync(user); try { if (string.IsNullOrEmpty(token)) { // Handle token retrieval failure return null; } viewModel.UserId = user.UserId; var jsonContent = JsonSerializer.Serialize(viewModel); var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); using (var httpClient = _apiConfigurationService.CreateHttpClientWithDefaultHeaders(token)) { HttpResponseMessage response; response = await httpClient.PostAsync(apiEndpoint, content); var responseObject = JsonSerializer.Deserialize(await response.Content.ReadAsStringAsync()); if (response.IsSuccessStatusCode) { viewModel.ErrCode = 1; viewModel.ErrMessage = responseObject.message; viewModel.StatusResponse = responseObject.statusResponse; return viewModel; } else { viewModel.ErrCode = 0; viewModel.Message = responseObject.message; viewModel.StatusResponse = responseObject.statusResponse; return viewModel; } } } catch (Exception ex) { ex.ToString(); throw; } } public async Task> SendGetApiRequest(User user, ReceivingVM viewModel, string apiEndpoint) { var token = await _tokenHelper.GetJwtTokenAsync(user); try { if (string.IsNullOrEmpty(token)) { return null; } viewModel.UserId = user.UserId; var jsonContent = JsonSerializer.Serialize(viewModel); var content = new StringContent(jsonContent, Encoding.UTF8, "application/json"); using (var httpClient = _apiConfigurationService.CreateHttpClientWithDefaultHeaders(token)) { HttpResponseMessage response; response = await httpClient.PostAsync(apiEndpoint, content); if (response.IsSuccessStatusCode) { var jsonResponse = await response.Content.ReadAsStringAsync(); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; var myPR = JsonSerializer.Deserialize>(jsonResponse, options); if (myPR.Count > 0) { myPR[0].URL = _configuration["CommonEndpoints:ApiDefaultHeaders:ItemImages"]; } return myPR; } else { // Handle API request failure return null; } } } catch (Exception ex) { throw; } } #endregion #region Get public async Task?> GetRRReport(User user, ReceivingVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:GetRRReport"]); } public async Task> GetForReceiving(User user, ReceivingVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:GetForReceiving"]); } public async Task> GetPRDetailByPRNo(User user, ReceivingVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:GetPRDetailByPRNo"]); } public async Task> GetRRDetailByPO(User user, ReceivingVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:GetRRDetailByPO"]); } public async Task?> GetLatestRRNo(User user, ReceivingVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:GetLatestRRNo"]); } public async Task?> GetRR(User user, ReceivingVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:GetRR"]); } public async Task?> GetRRDetail(User user, ReceivingVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:GetRRDetail"]); } #endregion #region POST PUT public async Task PutRRNoSeries(User user, ReceivingVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:PutRRNoSeries"]); } public async Task PostPutReceiving(User user, ReceivingVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:PostPutReceiving"]); } public async Task PutPOClose(User user, ReceivingVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:PutPOClose"]); } public async Task PostPutDeniedItem(User user, ReceivingVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:Receiving:PostPutDeniedItem"]); } #endregion } }