Activities of "enisn"

Hi,

I could reproduce the problem. It seems you're using an older version of General Settings component content with abp 6.0.

Can you try updating your MyGeneralSettings.razor file content as following:

@using Microsoft.Extensions.Localization
@using Volo.Abp.AspNetCore.Components.Web.LeptonXTheme.Navigation
@using Volo.Abp.LeptonX.Shared.Localization
@using System.Globalization
@using Volo.Abp.AspNetCore.Components.Web.LeptonXTheme.Components.ApplicationLayout.Common;
@inject IStringLocalizer<LeptonXResource> L
@inject ILanguagePlatformManager LanguagePlatformManager
@inherits GeneralSettings
<div class="lpx-settings" id="lpx-settings">
  <p>
    @Name
  </p>
  @if (HasMultipleStyles)
  {
  <div id="appearance" class="setting-icon" data-lpx-setting-icon="appearance"
    data-lpx-setting-id="settings-context-menu">
    <div class="setting">
      <i class="bi bi-laptop-fill"></i>
    </div>
  </div>
  }
  @if (HasContainerWidth)
  {
  <div id="containerWidth" class="setting-icon" data-lpx-setting-icon="containerWidth"
    data-lpx-setting-id="settings-context-menu">
    <div class="setting">
      <i class="bi bi-layout-three-columns"></i>
    </div>
  </div>
  }
  <div id="language" class="setting-icon" data-lpx-setting-icon="language"
    data-lpx-setting-id="settings-context-menu">
    <div class="setting">
      @CurrentLanguageTwoLetters
    </div>
  </div>
  <div class="setting-icon">
    <i class="bi bi-gear-wide-connected" aria-hidden="true" data-lpx-ctx-toggle="settings-context-menu"></i>
  </div>
  <div class="lpx-context-menu" data-lpx-context-menu="settings-context-menu">
    <ul class="lpx-nav-menu" id="settings-routes">
      <li class="outer-menu-item">
        <a class="lpx-menu-item-link lpx-menu-item">
        <span class="lpx-menu-item-icon">
        <i class="lpx-icon outer-icon bi bi-gear-wide-connected" aria-hidden="true"></i>
        </span>
        <span class="lpx-menu-item-text">@L["GeneralSettings"]</span>
        <span data-lpx-close="settings-context-menu">
        <i class="lpx-icon bi bi-x outer-icon dd-icon" aria-hidden="true"></i>
        </span>
        </a>
      </li>
      @if (HasMultipleStyles)
      {
      <li class="outer-menu-item">
        <a class="lpx-menu-item-link lpx-menu-item" data-lpx-setting-group="appearance">
        <span class="lpx-menu-item-icon">
        <i class="lpx-icon bi bi-palette-fill" aria-hidden="true"></i>
        </span>
        <span class="lpx-menu-item-text hidden-in-hover-trigger">@L["Appearance"]</span>
        <i class="dd-icon hidden-in-hover-trigger lpx-caret bi-chevron-down" aria-hidden="true"></i>
        </a>
        <ul class="lpx-inner-menu hidden-in-hover-trigger collapsed" data-id="appearance">
          @foreach (var style in ThemeOptions.Value.Styles)
          {
          <li class="lpx-inner-menu-item">
            <a class="lpx-menu-item-link lpx-menu-item" data-lpx-setting="@style.Key">
            <span class="lpx-menu-item-icon">
            <i class="lpx-icon @style.Value.Icon" aria-hidden="true"></i>
            </span>
            <span class="lpx-menu-item-text hidden-in-hover-trigger">@L["Theme:" + style.Key]</span>
            </a>
          </li>
          }
        </ul>
      </li>
      }
      @if (HasContainerWidth)
      {
      <li class="outer-menu-item">
        <a class="lpx-menu-item-link lpx-menu-item" data-lpx-setting-group="containerWidth">
        <span class="lpx-menu-item-icon">
        <i class="lpx-icon bi bi-aspect-ratio" aria-hidden="true"></i>
        </span>
        <span class="lpx-menu-item-text hidden-in-hover-trigger">@L["ContainerWidth"]</span>
        <i class="dd-icon hidden-in-hover-trigger lpx-caret bi-chevron-down" aria-hidden="true"></i>
        </a>
        <ul class="lpx-inner-menu hidden-in-hover-trigger collapsed" data-id="containerWidth">
          <li class="lpx-inner-menu-item">
            <a class="lpx-menu-item-link lpx-menu-item" data-lpx-setting="boxed">
            <span class="lpx-menu-item-icon"><i class="lpx-icon bi bi-square"
              aria-hidden="true"></i></span>
            <span class="lpx-menu-item-text hidden-in-hover-trigger">@L["ContainerWidth:Boxed"]</span>
            </a>
          </li>
          <li class="lpx-inner-menu-item">
            <a class="lpx-menu-item-link lpx-menu-item selected" data-lpx-setting="full">
            <span class="lpx-menu-item-icon">
            <i class="lpx-icon bi bi-layout-three-columns" aria-hidden="true"></i>
            </span>
            <span
              class="lpx-menu-item-text hidden-in-hover-trigger">@L["ContainerWidth:FullWidth"]</span>
            </a>
          </li>
        </ul>
      </li>
      }
      <li class="outer-menu-item">
        <a class="lpx-menu-item-link lpx-menu-item" data-lpx-setting-group="language">
        <span class="lpx-menu-item-icon"><i class="lpx-icon bi bi-globe" aria-hidden="true"></i></span>
        <span class="lpx-menu-item-text hidden-in-hover-trigger">@L["Language"]</span>
        <i class="dd-icon hidden-in-hover-trigger lpx-caret bi-chevron-down" aria-hidden="true"></i>
        </a>
        <ul class="lpx-inner-menu hidden-in-hover-trigger collapsed" data-id="language">
          @if (HasLanguages)
          {
          @foreach (var language in Languages)
          {
          <li class="lpx-inner-menu-item">
            <a class="lpx-menu-item-link@(language.CultureName == CurrentLanguage.CultureName ? " selected" : string.Empty)"
            @onclick="() => LanguagePlatformManager.ChangeAsync(language)">
            <span class="lpx-menu-item-text hidden-in-hover-trigger">@language.DisplayName / @(new
            CultureInfo(language.CultureName).TwoLetterISOLanguageName.ToUpper())</span>
            </a>
          </li>
          }
          }
        </ul>
      </li>
    </ul>
  </div>
</div>

ABP Blob Storing doesn't support tenant-based configuration by default.

But you can customize AzureBlobProviderConfiguration like the following example: https://docs.abp.io/en/abp/latest/Blob-Storing-Custom-Provider#extra-configuration-options

You can resolve current tenant and return custom values according to the tenant.

Yes, you're right. The PR was made to the dev branch which will be shipped in v7.0.

So, I've picked those changes to the v6.0, it'll be included in the closest patch version (6.0.1). https://github.com/abpframework/abp/pull/14293

Hi @yasin.hallak.89@gmail.com

You can't get the source-code of HTML demo for now because of some limitations. But we're planning to make it accessible in the future.

But. anything is trimmed from application bundles and they include everything that is required for those components. So you can inspect that demo, get the plain HTML and use it in your application without limitation. All of them should be working on your application without making any CSS change.

You can either log them manually or add to EntityHistorySelectors in AbpAuditingOptions.

@gterdem I have decorated the classes with [Audited] which should be the same as with the entityhistoryselectors isn't it?

Yes, both them mean same thing. You can either use attributes or manage all of them from selectors.

  • Attribute has higher priority, if you define attribuıte it'll accepted: https://github.com/abpframework/abp/blob/c78497a4cebf1ca39e355b6b62185db4a291dc80/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs#L109

  • Selector has the lowest priority and it's checked at the end: https://github.com/abpframework/abp/blob/c78497a4cebf1ca39e355b6b62185db4a291dc80/framework/src/Volo.Abp.Auditing/Volo/Abp/Auditing/AuditingHelper.cs#L120

So, yes both of them can be used for the same purpose.

Answer

We've planned a new feature for the chat module for the deletion of chat messages for a future milestone.

But in your version, you can get the source code of chat module and customize it according to your requirements.

Hi @webking-abp1

The field named EditionEndDateUtc is used together with webhook responses by Payment module. It can be configured like below: https://docs.abp.io/en/commercial/latest/modules/saas#tenant-edition-subscription

So, If there is an EditionEndDateUtc data, that means that tenant achieved that edition with a payment and it can be only changed by a payment provider like canceling payment or renewing payments, or a refund. So, updating EditionEndDateUtc manually brings other responsibilities like updating it on each payment status change.

Managing EditionEndDateUtc is not recommended by us and I recommend you use a new field to manage your logic. You can use Object Extensions to define new properties to the Tenant entity.

You can still use the existing EditionEndDateUtc property but you should get its responsibility and update it on each payment action.

Ok, we'll investigate the breadcrumb issue.

If you mean a Tenant while saying customer, you can use the following steps.

I assumed you already created Plan and Gateway Plan but I'll include them in the first steps.

  • Create a plan. (in this case I use name 'Plan for ATT Blue')

  • Click actions menu and go to Manage Gateway Plans and add a gateway plan for your product from stripe.

  • Go to Saas > Editions from the menu and create or edit an edition. You'll see a dropdown for Plan. Choose the newly created 'Plan for ATT Blue'.

    • If the dropdown isn't visible. Make sure you made Saas-Payment Configuration properly.
      Configure<AbpSaasPaymentOptions>(options =>
      {
          options.IsPaymentSupported = true;
      });
      

After completing these steps, you're ready to prepare a payment for a tenant.

  • Create a page and put a form with submit button. When a user submitted, you need to start a subscription with the following method:

    public class IndexModel : PageModel
    {
            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);
            }
        }
    

Or you can use a static editionId instead of posting that parameter from a form.

Yes, it'll be included in v6.0 and it'll be released very soon.

Showing 201 to 210 of 496 entries
Made with ❤️ on ABP v9.1.0-preview. Updated on November 11, 2024, 11:11