using CPRNIMS.Domain.UIContracts.Common; using CPRNIMS.Domain.UIContracts.PO; using CPRNIMS.Infrastructure.Helper; using CPRNIMS.Infrastructure.Models.Account; using CPRNIMS.Infrastructure.Models.Common; using CPRNIMS.Infrastructure.ViewModel.PO; 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.PO { public class PurchaseOrder : IPurchaseOrder { private readonly IConfiguration _configuration; private readonly TokenHelper _tokenHelper; private readonly IApiConfigurationService _apiConfigurationService; public PurchaseOrder(IConfiguration configuration, TokenHelper tokenHelper, IApiConfigurationService apiConfigurationService) { _configuration = configuration; _tokenHelper = tokenHelper; _apiConfigurationService = apiConfigurationService; } #region SendRequest service public async Task SendPostApiRequest(User user, POVM viewModel, string apiEndpoint) { var token = await _tokenHelper.GetValidTokenAsync(); var responseObject = new ResponseObject(); 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); responseObject = JsonSerializer.Deserialize(await response.Content.ReadAsStringAsync()); if (response.IsSuccessStatusCode) { viewModel.Message = responseObject.message; viewModel.messCode = 1; viewModel.Data = responseObject.data; return viewModel; } else { viewModel.Message = responseObject.message; viewModel.messCode = 0; return viewModel; } } } catch (Exception ex) { viewModel.Message = responseObject.message; viewModel.messCode = 0; return viewModel; } } public async Task> SendGetApiRequest(User user, POVM viewModel, string apiEndpoint) { var token = await _tokenHelper.GetValidTokenAsync(); 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); if (response.IsSuccessStatusCode) { var jsonResponse = await response.Content.ReadAsStringAsync(); var options = new JsonSerializerOptions { PropertyNamingPolicy = JsonNamingPolicy.CamelCase }; var myPOs = JsonSerializer.Deserialize>(jsonResponse, options); if(myPOs.Count > 0) { myPOs[0].URL = _configuration["CommonEndpoints:ApiDefaultHeaders:ESignaturePath"]; myPOs[0].URLImg = _configuration["CommonEndpoints:ApiDefaultHeaders:ItemImages"]; } return myPOs; } else { // Handle API request failure return null; } } } catch (Exception ex) { throw; } } #endregion #region Get public async Task?> GetIncotermsByName(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetIncotermsByName"]); } public async Task?> GetPOListByTerm(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetPOListByTerm"]); } public async Task?> GetIncomingShipment(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetIncomingShipment"]); } public async Task> GetSupplierBidById(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetSupplierBidById"]); } public async Task> GetForPO(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetForPO"]); } public async Task> GetForPOApproval(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetForPOApproval"]); } public async Task> GetForPOApprovalByPRNo(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetForPOApprovalByPRNo"]); } public async Task> GetSupplierBidByItem(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetSupplierBidByItem"]); } public async Task?> GetPOItemDetail(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetPOItemDetail"]); } public async Task> GetSupplierBid(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:CanvassMgmt:GetSupplierBid"]); } public async Task> GetForBiddingApproval(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetForBiddingApproval"]); } public async Task> GetForPOPerSuppEmail(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetForPOPerSuppEmail"]); } public async Task> GetApprovedPO(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetApprovedPO"]); } public async Task> GetApprovedPOPerEmail(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetApprovedPOPerEmail"]); } public async Task?> GetPaymentTerms(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetPaymentTerms"]); } public async Task?> GetLatestPO(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetLatestPO"]); } public async Task?> GetLatestPO2(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetLatestPO2"]); } public async Task?> GetDocRequired(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetDocRequired"]); } public async Task?> GetOtherCharges(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetOtherCharges"]); } public async Task?> GetSuppliers(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetSuppliers"]); } public async Task?> GetPRWOCanvass(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetPRWOCanvass"]); } public async Task?> GetCreatedPO(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetCreatedPO"]); } public async Task?> GetCreatedPOPerSupId(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetCreatedPOPerSupId"]); } public async Task?> GetPRItemDetail(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetPRItemDetail"]); } public async Task?> GetMyCreatedPO(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetMyCreatedPO"]); } public async Task?> GetPODetailBySuppierId(User user, POVM viewModels) { return await SendGetApiRequest(user, viewModels, _configuration["LLI:NonInvent:POMgmt:GetPODetailBySuppierId"]); } public async Task?> GetIncoterms(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetIncoterms"]); } public async Task?> GetPRPOSummaryReport(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetPRPOSummaryReport"]); } public async Task?> GetPRPOSummaryItem(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetPRPOSummaryItem"]); } public async Task?> GetIndexCard(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetIndexCard"]); } public async Task?> GetPortOfDischarge(User user, POVM viewModel) { return await SendGetApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:GetPortOfDischarge"]); } #endregion #region Post Put public async Task PostApprovedSupplier(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PostApprovedSupplier"]); } public async Task PostApprovedPO(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PostApprovedPO"]); } public async Task PostApprovedSuggested(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PostApprovedSuggested"]); } public async Task PostPutPO(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PostPutPO"]); } public async Task PostPOToSupplier(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PostPOToSupplier"]); } public async Task PostPutCustomPO(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PostPutCustomPO"]); } public async Task PutPRItemDetails(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PutPRItemDetails"]); } public async Task PutMyPONo(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PutMyPONo"]); } public async Task PutPOItemDetail(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PutPOItemDetail"]); } public async Task ApprovedSelectedPO(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:ApprovedSelectedPO"]); } public async Task PostPutDocRequired(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PostPutDocRequired"]); } public async Task PutPOCancel(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PutPOCancel"]); } public async Task PostPutOtherCharges(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PostPutOtherCharges"]); } public async Task PostPutIncoterms(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:PostPutIncoterms"]); } public async Task DeleteIncShip(User user, POVM viewModel) { return await SendPostApiRequest(user, viewModel, _configuration["LLI:NonInvent:POMgmt:DeleteIncShip"]); } #endregion } }