Пример #1
0
        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"
            });
        }
Пример #2
0
        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"
            });
        }
Пример #5
0
        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);
        }
Пример #6
0
        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()
                });
            }
        }
Пример #8
0
        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"
            });
        }
Пример #9
0
        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}");
            }
        }
Пример #10
0
        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);
        }
Пример #11
0
        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"
                });
            }
        }