private async Task <HttpResponseMessage> SendMessage(SapSaleOrderModel saleOrder, string sapSystem, string uriString, HttpMethod method)
        {
            var message = new HttpRequestMessage()
            {
                RequestUri = new Uri(uriString),
                Content    = new StringContent(JsonConvert.SerializeObject(saleOrder,
                                                                           new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                }),
                                               Encoding.UTF8,
                                               "application/json"),
                Method = method
            };

            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();

            return(await client.SendAsync(message));
        }
Example #2
0
        public bool CanUpdate(SapSaleOrderInvoiceResponse saleOrder, SapSaleOrderModel billingRequest)
        {
            if (saleOrder == null)
            {
                _logger.LogError($"Failed at updating billing for invoice: {billingRequest.InvoiceId}. The invoice not exist in SAP.");
                return(false);
            }

            return(true);
        }
Example #3
0
        public bool CanCreate(SapBusinessPartner sapBusinessPartner, SapSaleOrderModel billingRequest)
        {
            if (sapBusinessPartner == null)
            {
                _logger.LogError($"Failed at generating billing request for user: {billingRequest.UserId}.");
                return(false);
            }

            return(true);
        }
Example #4
0
        public bool CanCreate(SapBusinessPartner sapBusinessPartner, SapSaleOrderModel billingRequest)
        {
            if (sapBusinessPartner == null)
            {
                _logger.LogError($"Failed at generating billing request for user: {billingRequest.UserId}.");
                return(false);
            }

            if (string.IsNullOrEmpty(sapBusinessPartner.FederalTaxID))
            {
                _logger.LogError($"Can not create billing request for user id : {billingRequest.UserId}, FiscalId: {billingRequest.FiscalID} and user type: {billingRequest.PlanType}");
                return(false);
            }

            return(true);
        }
Example #5
0
        public SapSaleOrderModel MapDopplerBillingRequestToSapSaleOrder(BillingRequest billingRequest)
        {
            var sapSaleOrder = new SapSaleOrderModel
            {
                NumAtCard            = billingRequest.PurchaseOrder ?? "",
                U_DPL_RECURRING_SERV = billingRequest.IsPlanUpgrade ? "N" : "Y",
                DocumentLines        = new List <SapDocumentLineModel>(),
                DocDate    = _dateTimeProvider.GetDateByTimezoneId(_dateTimeProvider.UtcNow, _timezoneConfig.InvoicesTimeZone).ToString("yyyy-MM-dd"),
                DocDueDate = _dateTimeProvider.GetDateByTimezoneId(_dateTimeProvider.UtcNow, _timezoneConfig.InvoicesTimeZone).ToString("yyyy-MM-dd"),
                TaxDate    = _dateTimeProvider.GetDateByTimezoneId(_dateTimeProvider.UtcNow, _timezoneConfig.InvoicesTimeZone).ToString("yyyy-MM-dd")
            };
            var currencyCode = Dictionary.CurrencyDictionary.TryGetValue(billingRequest.Currency, out var code) ? code : "";

            var itemCode = _sapBillingItemsService.GetItemCode(billingRequest.PlanType, billingRequest.CreditsOrSubscribersQuantity, billingRequest.IsCustomPlan);

            var planItem = new SapDocumentLineModel
            {
                ItemCode        = itemCode,
                UnitPrice       = billingRequest.PlanFee,
                Currency        = currencyCode,
                FreeText        = $"{currencyCode} {billingRequest.PlanFee.ToString(CultureInfo.CurrentCulture)} + IMP",
                DiscountPercent = billingRequest.Discount ?? 0,
                CostingCode     = _costingCode1,
                CostingCode2    = _costingCode2,
                CostingCode3    = _costingCode3,
                CostingCode4    = _costingCode4
            };

            var freeText = new
            {
                Amount      = $"{currencyCode} {billingRequest.PlanFee.ToString(CultureInfo.CurrentCulture)} + IMP",
                Periodicity = billingRequest.Periodicity != null ? $"Plan {(Dictionary.PeriodicityDictionary.TryGetValue(billingRequest.Periodicity, out var outPeriodicity) ? outPeriodicity : string.Empty)}" : null,
                Discount    = billingRequest.Discount > 0 ? $"Descuento {billingRequest.Discount}%" : null,
                Payment     = $"Abono {billingRequest.PeriodMonth:00} {billingRequest.PeriodYear}",
            };

            planItem.FreeText = string.Join(" - ", new string[] { freeText.Amount, freeText.Periodicity, freeText.Discount, freeText.Payment }.Where(s => !string.IsNullOrEmpty(s)));

            sapSaleOrder.DocumentLines.Add(planItem);

            if (billingRequest.ExtraEmails > 0)
            {
                var itemCodeSurplus = _sapBillingItemsService.GetItems(billingRequest.PlanType).Where(x => x.SurplusEmails.Value)
                                      .Select(x => x.ItemCode)
                                      .FirstOrDefault();

                var extraEmailItem = new SapDocumentLineModel
                {
                    ItemCode     = itemCodeSurplus,
                    UnitPrice    = billingRequest.ExtraEmailsFee,
                    Currency     = currencyCode,
                    FreeText     = $"Email excedentes {billingRequest.ExtraEmails}",
                    CostingCode  = _costingCode1,
                    CostingCode2 = _costingCode2,
                    CostingCode3 = _costingCode3,
                    CostingCode4 = _costingCode4
                };

                if (billingRequest.ExtraEmailsFee > 0)
                {
                    extraEmailItem.FreeText +=
                        $" - {currencyCode} {billingRequest.ExtraEmailsFeePerUnit} + IMP";
                }

                extraEmailItem.FreeText +=
                    $" - PerĂ­odo {billingRequest.ExtraEmailsPeriodMonth:00} {billingRequest.ExtraEmailsPeriodYear}";

                sapSaleOrder.DocumentLines.Add(extraEmailItem);
            }

            sapSaleOrder.FiscalID            = billingRequest.FiscalID;
            sapSaleOrder.UserId              = billingRequest.Id;
            sapSaleOrder.PlanType            = billingRequest.PlanType;
            sapSaleOrder.BillingSystemId     = billingRequest.BillingSystemId;
            sapSaleOrder.TransactionApproved = billingRequest.TransactionApproved;

            return(sapSaleOrder);
        }
Example #6
0
        public SapSaleOrderModel MapDopplerBillingRequestToSapSaleOrder(BillingRequest billingRequest)
        {
            var sapSaleOrder = new SapSaleOrderModel
            {
                NumAtCard            = billingRequest.PurchaseOrder ?? "",
                U_DPL_RECURRING_SERV = billingRequest.IsPlanUpgrade ? "N" : "Y",
                U_DPL_CARD_HOLDER    = billingRequest.CardHolder,
                U_DPL_CARD_NUMBER    = billingRequest.CardNumber,
                U_DPL_CARD_TYPE      = billingRequest.CardType,
                U_DPL_CARD_ERROR_COD = billingRequest.CardErrorCode,
                U_DPL_CARD_ERROR_DET = billingRequest.CardErrorDetail,
                DocumentLines        = new List <SapDocumentLineModel>(),
                DocDate    = _dateTimeProvider.GetDateByTimezoneId(_dateTimeProvider.UtcNow, _timezoneConfig.InvoicesTimeZone).ToString("yyyy-MM-dd"),
                DocDueDate = _dateTimeProvider.GetDateByTimezoneId(_dateTimeProvider.UtcNow, _timezoneConfig.InvoicesTimeZone).ToString("yyyy-MM-dd"),
                TaxDate    = _dateTimeProvider.GetDateByTimezoneId(_dateTimeProvider.UtcNow, _timezoneConfig.InvoicesTimeZone).ToString("yyyy-MM-dd")
            };

            var itemCode = _sapBillingItemsService.GetItemCode(billingRequest.PlanType, billingRequest.CreditsOrSubscribersQuantity, billingRequest.IsCustomPlan);

            var planItem = new SapDocumentLineModel
            {
                TaxCode         = _defaultTaxCode,
                ItemCode        = itemCode,
                UnitPrice       = billingRequest.PlanFee,
                Currency        = _currencyCode,
                FreeText        = $"{_currencyCode} {billingRequest.PlanFee.ToString(CultureInfo.CurrentCulture)} + TAX",
                DiscountPercent = billingRequest.Discount ?? 0,
                CostingCode     = _costingCode1,
                CostingCode2    = _costingCode2,
                CostingCode3    = _costingCode3,
                CostingCode4    = _costingCode4
            };

            var freeText = new
            {
                Amount      = $"{_currencyCode} {billingRequest.PlanFee.ToString(CultureInfo.CurrentCulture)} + TAX",
                Periodicity = billingRequest.Periodicity != null ? $" {(periodicities.TryGetValue(billingRequest.Periodicity, out var outPeriodicity2) ? outPeriodicity2 : string.Empty)} Plan " : null,
                Discount    = billingRequest.Discount > 0 ? $"{billingRequest.Discount}% OFF" : null,
                Payment     = $"Payment {billingRequest.PeriodMonth:00} {billingRequest.PeriodYear}",
            };

            planItem.FreeText = string.Join(" - ", new string[] { freeText.Amount, freeText.Periodicity, freeText.Discount, freeText.Payment }.Where(s => !string.IsNullOrEmpty(s)));

            sapSaleOrder.DocumentLines.Add(planItem);

            if (billingRequest.ExtraEmails > 0)
            {
                var itemCodeSurplus = _sapBillingItemsService.GetItems(billingRequest.PlanType).Where(x => x.SurplusEmails.HasValue && x.SurplusEmails.Value)
                                      .Select(x => x.ItemCode)
                                      .FirstOrDefault();

                var extraEmailItem = new SapDocumentLineModel
                {
                    TaxCode      = _defaultTaxCode,
                    ItemCode     = itemCodeSurplus,
                    UnitPrice    = billingRequest.ExtraEmailsFee,
                    Currency     = _currencyCode,
                    FreeText     = $"Excess emails {billingRequest.ExtraEmails}",
                    CostingCode  = _costingCode1,
                    CostingCode2 = _costingCode2,
                    CostingCode3 = _costingCode3,
                    CostingCode4 = _costingCode4
                };

                var extraEmailsFreeText = new
                {
                    ExcessEmails = $"Excess emails {billingRequest.ExtraEmails}",
                    Amount       = billingRequest.ExtraEmailsFee > 0 ? $"{_currencyCode} {billingRequest.ExtraEmailsFeePerUnit} + TAX" : null
                };


                if (billingRequest.ExtraEmailsFee > 0)
                {
                    extraEmailItem.FreeText += $" - {_currencyCode} {billingRequest.ExtraEmailsFeePerUnit} + TAX";
                }

                extraEmailItem.FreeText += $" - Period {billingRequest.ExtraEmailsPeriodMonth:00} {billingRequest.ExtraEmailsPeriodYear}";

                var test = string.Join(" - ", new string[] { extraEmailsFreeText.ExcessEmails, extraEmailsFreeText.Amount }.Where(s => !string.IsNullOrEmpty(s)));

                sapSaleOrder.DocumentLines.Add(extraEmailItem);
            }

            sapSaleOrder.FiscalID            = billingRequest.FiscalID;
            sapSaleOrder.UserId              = billingRequest.Id;
            sapSaleOrder.PlanType            = billingRequest.PlanType;
            sapSaleOrder.BillingSystemId     = billingRequest.BillingSystemId;
            sapSaleOrder.TransactionApproved = billingRequest.TransactionApproved;
            sapSaleOrder.TransferReference   = billingRequest.TransferReference;

            return(sapSaleOrder);
        }
Example #7
0
        public static SapSaleOrderModel MapDopplerBillingRequestToSapSaleOrder(BillingRequest billingRequest)
        {
            var sapSaleOrder = new SapSaleOrderModel
            {
                NumAtCard            = billingRequest.PurchaseOrder ?? "",
                U_DPL_RECURRING_SERV = billingRequest.IsPlanUpgrade ? "N" : "Y",
                DocumentLines        = new List <SapDocumentLineModel>()
            };
            var currencyCode = Dictionary.CurrencyDictionary.TryGetValue(billingRequest.Currency, out var code) ? code : "";

            var jsonPath  = Path.Combine(Environment.CurrentDirectory, @"Resources/SapBillingItems.json");
            var itemsList = JsonConvert.DeserializeObject <List <SapBillingItemModel> >(File.ReadAllText(jsonPath));

            var itemCodesList = itemsList.Where(x => x.PlanType == billingRequest.PlanType)
                                .Select(x => x.PlanDescription)
                                .First();

            var itemCode = billingRequest.IsCustomPlan ? itemCodesList.Where(x => x.CustomPlan == true)
                           .Select(x => x.ItemCode)
                           .FirstOrDefault()
                : itemCodesList.Where(x => x.emailsQty == billingRequest.CreditsOrSubscribersQuantity || x.SubscriberQty == billingRequest.CreditsOrSubscribersQuantity)
                           .Select(x => x.ItemCode)
                           .FirstOrDefault();

            var planItem = new SapDocumentLineModel
            {
                ItemCode        = itemCode,
                UnitPrice       = billingRequest.PlanFee,
                Currency        = currencyCode,
                FreeText        = $"{currencyCode} {billingRequest.PlanFee.ToString(CultureInfo.CurrentCulture)} + IMP",
                DiscountPercent = billingRequest.Discount ?? 0
            };

            if (billingRequest.Periodicity != null)
            {
                var periodicity = Dictionary.PeriodicityDictionary.TryGetValue(billingRequest.Periodicity, out var outPeriodicity) ? outPeriodicity : "";
                planItem.FreeText += $" - Plan {periodicity} ";
            }

            planItem.FreeText += $" - Abono {billingRequest.PeriodMonth:00} {billingRequest.PeriodYear}";

            if (billingRequest.Discount > 0)
            {
                planItem.FreeText += $" - Descuento {billingRequest.Discount}%";
            }

            sapSaleOrder.DocumentLines.Add(planItem);

            if (billingRequest.ExtraEmails > 0)
            {
                var itemCodeSurplus = itemCodesList.Where(x => x.SurplusEmails == true)
                                      .Select(x => x.ItemCode)
                                      .FirstOrDefault();

                var extraEmailItem = new SapDocumentLineModel
                {
                    ItemCode  = itemCodeSurplus,
                    UnitPrice = billingRequest.ExtraEmailsFee,
                    Currency  = currencyCode,
                    FreeText  = $"Email excedentes {billingRequest.ExtraEmails}"
                };

                if (billingRequest.ExtraEmailsFee > 0)
                {
                    extraEmailItem.FreeText +=
                        $" - {currencyCode} {billingRequest.ExtraEmailsFeePerUnit} + IMP";
                }

                extraEmailItem.FreeText +=
                    $" - PerĂ­odo {billingRequest.ExtraEmailsPeriodMonth:00} {billingRequest.ExtraEmailsPeriodYear}";

                sapSaleOrder.DocumentLines.Add(extraEmailItem);
            }

            sapSaleOrder.FiscalID = billingRequest.FiscalID;
            sapSaleOrder.UserId   = billingRequest.Id;
            sapSaleOrder.PlanType = billingRequest.PlanType;

            return(sapSaleOrder);
        }