private async Task <SapTaskResult> SendOutgoingPaymentToSap(string sapSystem, SapCreditNoteResponse response, string transferReference) { var billingMapper = GetMapper(sapSystem); var outgoingPaymentRequest = billingMapper.MapSapOutgoingPayment(response, transferReference); var serviceSetting = SapServiceSettings.GetSettings(_sapConfig, sapSystem); var message = new HttpRequestMessage { RequestUri = new Uri($"{serviceSetting.BaseServerUrl}{serviceSetting.BillingConfig.OutgoingPaymentEndpoint}"), Content = new StringContent(JsonConvert.SerializeObject(outgoingPaymentRequest), Encoding.UTF8, "application/json"), Method = HttpMethod.Post }; var sapTaskHandler = _sapServiceSettingsFactory.CreateHandler(sapSystem); var cookies = await sapTaskHandler.StartSession(); message.Headers.Add("Cookie", cookies.B1Session); message.Headers.Add("Cookie", cookies.RouteId); var client = _httpClientFactory.CreateClient(); var sapResponse = await client.SendAsync(message); if (!sapResponse.IsSuccessStatusCode) { _logger.LogError($"Outgoing Payment could'n create to SAP because exists an error: '{sapResponse.Content.ReadAsStringAsync()}'."); } return(new SapTaskResult { IsSuccessful = sapResponse.IsSuccessStatusCode, IdUser = response.CardCode, SapResponseContent = await sapResponse.Content.ReadAsStringAsync(), TaskName = "Creating Credit Note with Refund Request" }); }
public async Task <SapTaskResult> Handle(SapTask dequeuedTask) { var sapTaskHandler = _sapServiceSettingsFactory.CreateHandler(_sapSystem); var sapServiceSettings = SapServiceSettings.GetSettings(_sapConfig, _sapSystem); var message = new HttpRequestMessage { RequestUri = new Uri($"{sapServiceSettings.BaseServerUrl}SBOBobService_SetCurrencyRate"), Content = new StringContent(JsonConvert.SerializeObject(dequeuedTask.CurrencyRate), Encoding.UTF8, "application/json"), Method = HttpMethod.Post }; var cookies = await sapTaskHandler.StartSession(); message.Headers.Add("Cookie", cookies.B1Session); message.Headers.Add("Cookie", cookies.RouteId); var client = _httpClientFactory.CreateClient(); var sapResponse = await client.SendAsync(message); var taskResult = new SapTaskResult { IsSuccessful = sapResponse.IsSuccessStatusCode, SapResponseContent = await sapResponse.Content.ReadAsStringAsync(), TaskName = $"Setting the {dequeuedTask.CurrencyRate.Currency} Currency Rate" }; return(taskResult); }
private async Task <SapTaskResult> UpdateInvoice(SapTask dequeuedTask, string sapSystem, SapSaleOrderInvoiceResponse invoiceFromSap) { var billingValidator = GetValidator(sapSystem); if (!billingValidator.CanUpdate(invoiceFromSap, dequeuedTask.BillingRequest)) { return(new SapTaskResult { IsSuccessful = false, IdUser = dequeuedTask.BillingRequest?.UserId.ToString(), SapResponseContent = $"Failed at updating billing request for the invoice: {dequeuedTask.BillingRequest.InvoiceId}.", TaskName = "Updating Billing Request" }); } var serviceSetting = SapServiceSettings.GetSettings(_sapConfig, sapSystem); var uriString = $"{serviceSetting.BaseServerUrl}{serviceSetting.BillingConfig.Endpoint}({invoiceFromSap.DocEntry})"; var sapResponse = await SendMessage(dequeuedTask.BillingRequest, sapSystem, uriString, HttpMethod.Patch); var taskResult = new SapTaskResult { IsSuccessful = sapResponse.IsSuccessStatusCode, IdUser = dequeuedTask.BillingRequest?.UserId.ToString(), SapResponseContent = await sapResponse.Content.ReadAsStringAsync(), TaskName = "Updating Invoice" }; return(taskResult); }
private async Task <SapTaskResult> CreateInvoice(SapTask dequeuedTask, string sapSystem) { var sapTaskHandler = _sapServiceSettingsFactory.CreateHandler(sapSystem); var businessPartner = await sapTaskHandler.TryGetBusinessPartner(dequeuedTask.BillingRequest.UserId, dequeuedTask.BillingRequest.FiscalID, dequeuedTask.BillingRequest.PlanType); var billingValidator = GetValidator(sapSystem); if (!billingValidator.CanCreate(businessPartner, dequeuedTask.BillingRequest)) { return(new SapTaskResult { IsSuccessful = false, IdUser = dequeuedTask.BillingRequest?.UserId.ToString(), SapResponseContent = $"Failed at generating billing request for the user: {dequeuedTask.BillingRequest.UserId}.", TaskName = "Creating Billing Request" }); } dequeuedTask.BillingRequest.CardCode = businessPartner.CardCode; var serviceSetting = SapServiceSettings.GetSettings(_sapConfig, sapSystem); var uriString = $"{serviceSetting.BaseServerUrl}{serviceSetting.BillingConfig.Endpoint}"; var sapResponse = await SendMessage(dequeuedTask.BillingRequest, sapSystem, uriString, HttpMethod.Post); return(new SapTaskResult { IsSuccessful = sapResponse.IsSuccessStatusCode, IdUser = dequeuedTask.BillingRequest?.UserId.ToString(), SapResponseContent = await sapResponse.Content.ReadAsStringAsync(), TaskName = "Creating Billing Request" }); }
private async Task <SapTaskResult> CancelCreditNote(SapCreditNoteResponse sapCreditNoteResponse, SapTask dequeuedTask, string sapSystem) { var serviceSetting = SapServiceSettings.GetSettings(_sapConfig, sapSystem); var uriString = $"{serviceSetting.BaseServerUrl}{serviceSetting.BillingConfig.CreditNotesEndpoint}({sapCreditNoteResponse.DocEntry})/Cancel"; var sapResponse = await SendMessage(null, sapSystem, uriString, HttpMethod.Post); var taskResult = new SapTaskResult { IsSuccessful = sapResponse.IsSuccessStatusCode, SapResponseContent = await sapResponse.Content.ReadAsStringAsync(), TaskName = "Canceling Credit Note" }; return(taskResult); }
private async Task <SapTaskResult> CreateBusinessPartner(SapTask dequeuedTask, string sapSystem) { var serviceSetting = SapServiceSettings.GetSettings(_sapConfig, sapSystem); var uriString = $"{serviceSetting.BaseServerUrl}{serviceSetting.BusinessPartnerConfig.Endpoint}/"; var sapResponse = await SendMessage(dequeuedTask.BusinessPartner, sapSystem, uriString, HttpMethod.Post); var taskResult = new SapTaskResult { IsSuccessful = sapResponse.IsSuccessStatusCode, SapResponseContent = await sapResponse.Content.ReadAsStringAsync(), TaskName = "Creating Business Partner" }; return(taskResult); }
public async Task <SapTaskResult> Handle(SapTask dequeuedTask) { try { var origin = dequeuedTask.BillingRequest.PlanType == 5 ? "relay" : "doppler"; var sapSystem = SapSystemHelper.GetSapSystemByBillingSystem(dequeuedTask.BillingRequest.BillingSystemId); var sapTaskHandler = _sapServiceSettingsFactory.CreateHandler(sapSystem); var existentInvoice = dequeuedTask.BillingRequest.InvoiceId != 0 ? await sapTaskHandler.TryGetInvoiceByInvoiceIdAndOrigin(dequeuedTask.BillingRequest.InvoiceId, origin) : null; var sapResponse = (dequeuedTask.TaskType == Enums.SapTaskEnum.BillingRequest) ? await CreateInvoice(dequeuedTask, sapSystem) : await UpdateInvoice(dequeuedTask, sapSystem, existentInvoice); if (sapResponse.IsSuccessful) { var serviceSetting = SapServiceSettings.GetSettings(_sapConfig, sapSystem); if (serviceSetting.BillingConfig.NeedCreateIncomingPayments && dequeuedTask.BillingRequest.TransactionApproved) { var response = JsonConvert.DeserializeObject <SapSaleOrderInvoiceResponse>(sapResponse.SapResponseContent); return(await SendIncomingPaymentToSap(serviceSetting, sapSystem, existentInvoice ?? response, dequeuedTask.BillingRequest.TransferReference, dequeuedTask.BillingRequest.PaymentDate)); } } else { _logger.LogError($"Invoice/Sales Order could'n create to SAP because exists an error: '{sapResponse.SapResponseContent}'."); var ss = dequeuedTask.TaskType; return(new SapTaskResult { IsSuccessful = false, SapResponseContent = $"Invoice/Sales Order could'n create to SAP because exists an error: '{sapResponse.SapResponseContent}'.", TaskName = dequeuedTask.TaskType == Enums.SapTaskEnum.BillingRequest ? "Creating Billing Request" : "Updating Billing Request", IdUser = dequeuedTask.BillingRequest?.UserId.ToString() }); } return(sapResponse); } catch (Exception ex) { return(new SapTaskResult { IsSuccessful = false, SapResponseContent = ex.Message, TaskName = "Creating Billing Request", IdUser = dequeuedTask.BillingRequest?.UserId.ToString() }); } }
private async Task <SapTaskResult> CreateCreditNote(SapSaleOrderInvoiceResponse sapSaleOrderInvoiceResponse, SapTask dequeuedTask, string sapSystem) { var sapCreditNote = GetMapper(sapSystem).MapToSapCreditNote(sapSaleOrderInvoiceResponse, dequeuedTask.CreditNoteRequest); sapCreditNote.BillingSystemId = dequeuedTask.CreditNoteRequest.BillingSystemId; var serviceSetting = SapServiceSettings.GetSettings(_sapConfig, sapSystem); var uriString = $"{serviceSetting.BaseServerUrl}{serviceSetting.BillingConfig.CreditNotesEndpoint}"; var sapResponse = await SendMessage(sapCreditNote, sapSystem, uriString, HttpMethod.Post); return(new SapTaskResult { IsSuccessful = sapResponse.IsSuccessStatusCode, IdUser = dequeuedTask.CreditNoteRequest?.ClientId.ToString(), SapResponseContent = await sapResponse.Content.ReadAsStringAsync(), TaskName = "Creating Credit Note Request" }); }
public async Task <string> TestSapUsConnection() { try { var handler = new HttpClientHandler { //ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => { return true; }, ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator, UseCookies = false }; var sapServiceSettings = SapServiceSettings.GetSettings(_sapConfig, countryCodeForUS); var client = new HttpClient(handler); var sapResponse = await client.SendAsync(new HttpRequestMessage { RequestUri = new Uri($"{sapServiceSettings.BaseServerUrl}Login"), Content = new StringContent(JsonConvert.SerializeObject( new SapServiceConfig { CompanyDB = sapServiceSettings.CompanyDB, Password = sapServiceSettings.Password, UserName = sapServiceSettings.UserName }), Encoding.UTF8, "application/json"), Method = HttpMethod.Post }); if (sapResponse.IsSuccessStatusCode) { _logger.LogInformation("[TEST] Connect with Sap correctly"); } else { _logger.LogInformation("[TEST] Connect with Sap failed"); } return($"Success {sapResponse.StatusCode}"); } catch (Exception e) { _logger.LogError(e, "[TEST] Error starting session in Sap."); return($"Exception: {e.Message}"); } }
private async Task <SapTaskResult> UpdateBusinessPartner(SapTask dequeuedTask, string sapSystem) { var serviceSetting = SapServiceSettings.GetSettings(_sapConfig, sapSystem); //SAP uses a non conventional patch where you have to send only the fields that you want to be changed with the new values dequeuedTask.BusinessPartner.BPAddresses = GetBPAddressesPatchObject(dequeuedTask.BusinessPartner.BPAddresses); dequeuedTask.BusinessPartner.ContactEmployees = GetContactEmployeesPatchObject(dequeuedTask.BusinessPartner.ContactEmployees, dequeuedTask.ExistentBusinessPartner.ContactEmployees); //we don't want to update: CUITs/DNI and Currency dequeuedTask.BusinessPartner.FederalTaxID = null; dequeuedTask.BusinessPartner.Currency = null; var uriString = $"{serviceSetting.BaseServerUrl}{serviceSetting.BusinessPartnerConfig.Endpoint}('{dequeuedTask.ExistentBusinessPartner.CardCode}')"; var sapResponse = await SendMessage(dequeuedTask.BusinessPartner, sapSystem, uriString, HttpMethod.Patch); var taskResult = new SapTaskResult { IsSuccessful = sapResponse.IsSuccessStatusCode, SapResponseContent = await sapResponse.Content.ReadAsStringAsync(), TaskName = "Updating Business Partner" }; return(taskResult); }
public async Task <SapTaskResult> Handle(SapTask dequeuedTask) { try { var sapSystem = SapSystemHelper.GetSapSystemByBillingSystem(dequeuedTask.BillingRequest.BillingSystemId); var sapTaskHandler = _sapServiceSettingsFactory.CreateHandler(sapSystem); var businessPartner = await sapTaskHandler.TryGetBusinessPartner(dequeuedTask.BillingRequest.UserId, dequeuedTask.BillingRequest.FiscalID, dequeuedTask.BillingRequest.PlanType); var billingValidator = GetValidator(sapSystem); if (!billingValidator.CanCreate(businessPartner, dequeuedTask.BillingRequest)) { return(new SapTaskResult { IsSuccessful = false, SapResponseContent = $"Failed at generating billing request for the user: {dequeuedTask.BillingRequest.UserId}.", TaskName = "Creating Billing Request" }); } dequeuedTask.BillingRequest.CardCode = businessPartner.CardCode; var serviceSetting = SapServiceSettings.GetSettings(_sapConfig, sapSystem); var message = new HttpRequestMessage { RequestUri = new Uri($"{serviceSetting.BaseServerUrl}{serviceSetting.BillingConfig.Endpoint}"), Content = new StringContent(JsonConvert.SerializeObject(dequeuedTask.BillingRequest), Encoding.UTF8, "application/json"), Method = HttpMethod.Post }; var cookies = await sapTaskHandler.StartSession(); message.Headers.Add("Cookie", cookies.B1Session); message.Headers.Add("Cookie", cookies.RouteId); var client = _httpClientFactory.CreateClient(); var sapResponse = await client.SendAsync(message); var responseContent = await sapResponse.Content.ReadAsStringAsync(); if (sapResponse.IsSuccessStatusCode) { if (serviceSetting.BillingConfig.NeedCreateIncomingPayments && dequeuedTask.BillingRequest.TransactionApproved) { responseContent = await sapResponse.Content.ReadAsStringAsync(); var response = JsonConvert.DeserializeObject <SapSaleOrderInvoiceResponse>(responseContent); return(await SendIncomingPaymentToSap(serviceSetting, sapSystem, response, dequeuedTask.BillingRequest.TransferReference, cookies)); } } else { _logger.LogError($"Invoice/Sales Order could'n create to SAP because exists an error: '{responseContent}'."); } return(new SapTaskResult { IsSuccessful = sapResponse.IsSuccessStatusCode, SapResponseContent = responseContent, TaskName = "Creating Billing Request" }); } catch (Exception ex) { return(new SapTaskResult { IsSuccessful = false, SapResponseContent = ex.Message, TaskName = "Creating Billing Request" }); } }