Hi @ElifKaya
Firstly we decided to make MenuItem without multi-tenancy, but now it has multi-tenantcy support but there is a missing implementation. So that is a bug, You can track #10114
Hi @learnabp
We'll release a documentation about Tenant - Edition subscription as soon as possible.
Dont really understand how ABP has build the Subscription & Payment System!
the documentation is no good in explaining how it is implemented!
How can a tenant be created using subscrition & payment from the Public Site ??
Also why is the Payment Menu shown in a Tenant where they can add payment gateway? shouldn't it only be avalible to the host??
see below i am logged in as a "Test Tenant" and i can see the Payment Menu and can change the Plans as a Tenant admin
For now, there is no public view implementation for subscription. You can make your own Pricing/Subscription page and then you can start a subscription with ISubscriptionService.
We don't plan to make a Public UI, becuse there are many use cases, we can't handle all of them at once.
I followed that steps and working properly:
docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
523922ca2557 mcr.microsoft.com/azure-sql-edge "/opt/mssql/bin/perm…" 13 days ago Up About an hour 1401/tcp, 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp eager_keldysh
a2247ca3f8f4 redis "docker-entrypoint.s…" 4 months ago Up About an hour 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp wonderful_goldberg
abp new MyMenuApp --with-public-website
DbMigrator, Web and Public.Web project.cd src/MyMenuApp.DbMigrator
dotnet run
Web project:cd ../MyMenuApp.Web
dotnet run
Web.Public projectcd ../MyMenuApp.Web.Public
dotnet run
So I can't reproduce the scenario that you faced. Please share a sample code about it.
Hi @learnabp
Can you share an empty project that reproduces your problem to my email: enis.necipoglu@volosoft.com
I can say something about then
Hi, you can customize toolbar with following this documentation https://nhn.github.io/tui.editor/latest/tutorial-example15-customizing-toolbar-buttons
You can open your own modal with file upload input, and append a text line into editor like [FileName.pdf](/your/path/to/file/FileName.pdf)
Getting menus from database for each request is too costly, so CmsKit uses Redis to cache them. When you change something about menus, *.Web projects purges cache and *.Public.Web gets latest state of menus.
By the way, you don't have to configure manually, if you have [DependsOn(typeof(AbpCachingStackExchangeRedisModule))] attribute, it configures itself with default configuration, reads Redis:Configuration from your appsettings.json
Hi learnabp
Are you using same Redis for your Web & Web.Public projects?
Can you try add Volo.Payment.Admin.* packages into your projects if not exist:
Volo.Payment.Admin.Application -> YourProject.ApplicationVolo.Payment.Admin.Application.Contracts -> YourProject.Application.ContractsVolo.Payment.Admin.HttpApi -> YourProject.HttpApiVolo.Payment.Admin.HttpApi.Client -> YourProject.HttpApi.ClientVolo.Payment.Admin.Blazor.WebAssembly or Volo.Payment.Admin.Blazor.Server -> YourProject.BlazorThen you have to create a plan, you can follow Payment > Payment Plans menu to configure it.
To configure your plans properly, please follow this documentation: https://docs.abp.io/en/commercial/latest/modules/payment#subscriptions
Hi @lan.dang
Firstly you have to complete configuration with following documentation: https://docs.abp.io/en/commercial/latest/modules/payment#subscriptions
After that, you have 2 options;
if you install both Volo.Saas & Volo.Payment modules properly, you'll see Plan Management and a Plan Selection dropdown in Edition modal:
You can inject ISubscriptionAppSerivce and create a subscription:
public class IndexModel : PageModel
{
public EditionDto Edition { get; set; }
protected ISubscriptionAppService SubscriptionAppService { get; }
protected ICurrentTenant CurrentTenant { get; }
public IndexModel(
ISubscriptionAppService subscriptionAppService,
ICurrentTenant currentTenant)
{
SubscriptionAppService = subscriptionAppService;
CurrentTenant = currentTenant;
}
public async Task<IActionResult> OnPostAsync(Guid editionId)
{
var paymentRequest = await SubscriptionAppService.CreateSubscriptionAsync(editionId, CurrentTenant.GetId());
return LocalRedirectPreserveMethod("/Payment/GatewaySelection?paymentRequestId=" + paymentRequest.Id);
}
}
Saas Service will track updates, endings or any changes at subscription and updates tenant edition.