CoreCommon: payment url with quantity of products

This commit is contained in:
Sergey Linnik 2022-08-05 15:19:25 +03:00
parent f43a228477
commit ef7419c9ae
5 changed files with 56 additions and 17 deletions

View File

@ -33,7 +33,7 @@ public interface ITariffService
IEnumerable<PaymentInfo> GetPayments(int tenantId);
string GetButton(int tariffId, string partnerId);
Tariff GetTariff(int tenantId, bool withRequestToPaymentSystem = true);
Uri GetShoppingUri(int tenant, string currency = null, string language = null, string customerEmail = null, string quantity = null, string backUrl = null);
Uri GetShoppingUri(int tenant, string currency = null, string language = null, string customerEmail = null, Dictionary<string, int> quantity = null, string backUrl = null);
Uri GetShoppingUri(int? tenant, int quotaId, string affiliateId, string currency = null, string language = null, string customerId = null, string quantity = null);
Uri GetShoppingUri(string[] productIds, string affiliateId = null, string currency = null, string language = null, string customerId = null, string quantity = null);
void ClearCache(int tenantId);

View File

@ -309,9 +309,10 @@ public class TariffService : ITariffService
return payments;
}
public Uri GetShoppingUri(int tenant, string currency = null, string language = null, string customerEmail = null, string quantity = null, string backUrl = null)
public Uri GetShoppingUri(int tenant, string currency = null, string language = null, string customerEmail = null, Dictionary<string, int> quantity = null, string backUrl = null)
{
var key = "shopingurl_all";
var hasQuantity = quantity != null && quantity.Any();
var key = "shopingurl_" + (hasQuantity ? string.Join('_', quantity.Keys.ToArray()) : "all");
var url = _cache.Get<string>(key);
if (url == null)
{
@ -320,9 +321,12 @@ public class TariffService : ITariffService
{
try
{
var productIds = _quotaService.GetTenantQuotas()
.Where(q => !string.IsNullOrEmpty(q.ProductId) && q.Visible)
.Select(q => q.ProductId);
var quotas = _quotaService.GetTenantQuotas()
.Where(q =>
!string.IsNullOrEmpty(q.ProductId)
&& q.Visible);
var productIds = quantity.Select(item => quotas.FirstOrDefault(q => q.Name == item.Key)?.ProductId);
var client = GetBillingClient();
url =
@ -334,7 +338,7 @@ public class TariffService : ITariffService
!string.IsNullOrEmpty(currency) ? "__Currency__" : null,
!string.IsNullOrEmpty(language) ? "__Language__" : null,
!string.IsNullOrEmpty(customerEmail) ? "__CustomerEmail__" : null,
!string.IsNullOrEmpty(quantity) ? "__Quantity__" : null,
hasQuantity ? "__Quantity__" : null,
!string.IsNullOrEmpty(backUrl) ? "__BackUrl__" : null
);
}
@ -358,8 +362,8 @@ public class TariffService : ITariffService
.Replace("__Currency__", HttpUtility.UrlEncode(currency ?? ""))
.Replace("__Language__", HttpUtility.UrlEncode((language ?? "").ToLower()))
.Replace("__CustomerEmail__", HttpUtility.UrlEncode(customerEmail ?? ""))
.Replace("__Quantity__", HttpUtility.UrlEncode(quantity ?? ""))
.Replace("__BackUrl__", HttpUtility.UrlEncode(backUrl ?? "")));
.Replace("__Quantity__", hasQuantity ? string.Join(',', quantity.Values) : "")
.Replace("__BackUrl__", HttpUtility.UrlEncode(backUrl ?? "")));
return result;
}

View File

@ -73,7 +73,7 @@ public class PaymentManager
return _tariffService.GetProductPriceInfo(productIds);
}
public Uri GetShoppingUri(string currency = null, string language = null, string customerEmail = null, string quantity = null, string backUrl = null)
public Uri GetShoppingUri(string currency = null, string language = null, string customerEmail = null, Dictionary<string, int> quantity = null, string backUrl = null)
{
return _tariffService.GetShoppingUri(_tenantManager.GetCurrentTenant().Id, currency, language, customerEmail, quantity, backUrl);
}

View File

@ -194,10 +194,10 @@ public class PortalController : ControllerBase
public long GetUsersCount()
{
return _coreBaseSettings.Personal ? 1 : _userManager.GetUserNames(EmployeeStatus.Active).Length;
}
[HttpGet("payment/url")]
public Uri GetPaymentUrl(string currency, string backUrl)
}
[HttpPut("payment/url")]
public Uri GetPaymentUrl(PaymentUrlRequestsDto inDto)
{
if (_paymentManager.GetTariffPayments(Tenant.Id).Any()
|| !_userManager.GetUsers(_securityContext.CurrentAccount.ID).IsAdmin(_userManager))
@ -205,10 +205,11 @@ public class PortalController : ControllerBase
return null;
}
return _paymentManager.GetShoppingUri(currency,
return _paymentManager.GetShoppingUri(inDto.Currency,
Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName,
_userManager.GetUsers(_securityContext.CurrentAccount.ID).Email,
backUrl: backUrl);
_userManager.GetUsers(_securityContext.CurrentAccount.ID).Email,
inDto.Quantity,
inDto.BackUrl);
}
[HttpGet("payment/account")]

View File

@ -0,0 +1,34 @@
// (c) Copyright Ascensio System SIA 2010-2022
//
// This program is a free software product.
// You can redistribute it and/or modify it under the terms
// of the GNU Affero General Public License (AGPL) version 3 as published by the Free Software
// Foundation. In accordance with Section 7(a) of the GNU AGPL its Section 15 shall be amended
// to the effect that Ascensio System SIA expressly excludes the warranty of non-infringement of
// any third-party rights.
//
// This program is distributed WITHOUT ANY WARRANTY, without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For details, see
// the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
//
// You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, EU, LV-1021.
//
// The interactive user interfaces in modified source and object code versions of the Program must
// display Appropriate Legal Notices, as required under Section 5 of the GNU AGPL version 3.
//
// Pursuant to Section 7(b) of the License you must retain the original Product logo when
// distributing the program. Pursuant to Section 7(e) we decline to grant you any rights under
// trademark law for use of our trademarks.
//
// All the Product's GUI elements, including illustrations and icon sets, as well as technical writing
// content are licensed under the terms of the Creative Commons Attribution-ShareAlike 4.0
// International. See the License terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
namespace ASC.Web.Api.Models;
public class PaymentUrlRequestsDto
{
public Dictionary<string, int> Quantity { get; set; }
public string Currency { get; set; }
public string BackUrl { get; set; }
}