@saasicat/ui-vue 1.0.0-rc.21 → 1.0.0-rc.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/.build-stamp +1 -1
  2. package/dist/assets/ui-vue.css +1 -1
  3. package/dist/{batch-column-fetcher-DQ89o95K.d.cts → batch-column-fetcher-AxKa7wcD.d.cts} +1 -1
  4. package/dist/{batch-column-fetcher-Sr48UWEX.d.ts → batch-column-fetcher-BrQLbwVk.d.ts} +1 -1
  5. package/dist/{catalog-0eZwciPW.d.cts → catalog-BuO6O37o.d.cts} +33 -1
  6. package/dist/{catalog-0eZwciPW.d.ts → catalog-BuO6O37o.d.ts} +33 -1
  7. package/dist/{chunk-CZIVA536.js → chunk-2ISFGJ3V.js} +62 -1
  8. package/dist/{chunk-VLGEOPZH.js → chunk-4HUJLH7O.js} +28 -11
  9. package/dist/{chunk-7CHT2ATN.js → chunk-7GO2PBDP.js} +1 -1
  10. package/dist/{chunk-47HDYN35.js → chunk-X27PN2LA.js} +1 -1
  11. package/dist/{chunk-RFJ4UGOE.js → chunk-ZY526U2H.js} +1 -1
  12. package/dist/client/index.cjs +62 -1
  13. package/dist/client/index.d.cts +4 -4
  14. package/dist/client/index.d.ts +4 -4
  15. package/dist/client/index.js +3 -3
  16. package/dist/index.cjs +128 -51
  17. package/dist/index.d.cts +4 -4
  18. package/dist/index.d.ts +4 -4
  19. package/dist/index.js +7 -5
  20. package/dist/pages/TenantDetailPage.js +98 -15
  21. package/dist/quasar/index.cjs +62 -1
  22. package/dist/quasar/index.d.cts +2 -2
  23. package/dist/quasar/index.d.ts +2 -2
  24. package/dist/quasar/index.js +2 -2
  25. package/dist/{resource-registry-GAxu2kn6.d.ts → resource-registry-B4PT_7ql.d.ts} +1 -1
  26. package/dist/{resource-registry-zfCLvEgx.d.cts → resource-registry-C-HClLXi.d.cts} +1 -1
  27. package/dist/vue/index.cjs +128 -51
  28. package/dist/vue/index.d.cts +20 -6
  29. package/dist/vue/index.d.ts +20 -6
  30. package/dist/vue/index.js +6 -4
  31. package/package.json +3 -3
  32. package/src/client/i18n/messages/tenants.ts +52 -0
  33. package/src/client/resources/tenants.resource.ts +20 -3
  34. package/src/index.ts +1 -0
  35. package/src/internal/tenant-detail/TenantCharges.vue +73 -0
  36. package/src/pages/TenantDetailPage.vue +22 -0
  37. package/src/vue/index.ts +1 -0
  38. package/src/vue/use-tenant-account.ts +37 -0
  39. package/src/vue/use-tenant-billing.ts +8 -0
package/dist/.build-stamp CHANGED
@@ -1 +1 @@
1
- d1c64f8b1df6cdcad17723740e0b7de2d74301bb556752665e07a93bf6f24156
1
+ 525845a48fd939462fd8200411afd68769cfa071bca832f87f14ed7ed939633a
@@ -6791,7 +6791,7 @@ code[data-v-aab75c67] {
6791
6791
  font-size: var(--sa-text-md);
6792
6792
  }
6793
6793
 
6794
- code[data-v-81871de6] {
6794
+ code[data-v-481c2843] {
6795
6795
  background: var(--sa-color-bg-sunken);
6796
6796
  padding: var(--sa-space-0) var(--sa-space-2);
6797
6797
  border-radius: var(--sa-radius-badge);
@@ -1,4 +1,4 @@
1
- import { a5 as SaMessages, H as HttpClient, l as KvStore, a2 as SaLocale, aD as SaNavMessages } from './catalog-0eZwciPW.cjs';
1
+ import { a5 as SaMessages, H as HttpClient, l as KvStore, a2 as SaLocale, aD as SaNavMessages } from './catalog-BuO6O37o.cjs';
2
2
  import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef } from '@saasicat/core';
3
3
 
4
4
  /**
@@ -1,4 +1,4 @@
1
- import { a5 as SaMessages, H as HttpClient, l as KvStore, a2 as SaLocale, aD as SaNavMessages } from './catalog-0eZwciPW.js';
1
+ import { a5 as SaMessages, H as HttpClient, l as KvStore, a2 as SaLocale, aD as SaNavMessages } from './catalog-BuO6O37o.js';
2
2
  import { PublicBootResponse, AdminManifest, StandardPageKey, TenantColumnDef } from '@saasicat/core';
3
3
 
4
4
  /**
@@ -1,5 +1,5 @@
1
1
  import * as _saasicat_core from '@saasicat/core';
2
- import { AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/core';
2
+ import { AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, AdminSubscriberAccount, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/core';
3
3
 
4
4
  /**
5
5
  * Minimal abstraction over `fetch`. Consumers may pass their own
@@ -387,6 +387,11 @@ declare const tenantsResource: ResourceDef<{
387
387
  */
388
388
  readonly suspend: (http: HttpClient, ctx: ResourceContext, slug: string, reason: string, mfaCode?: string) => Promise<void>;
389
389
  readonly reactivate: (http: HttpClient, ctx: ResourceContext, slug: string, mfaCode?: string) => Promise<void>;
390
+ /**
391
+ * The charges of the tenant's subscriber, newest first. Served only where
392
+ * the manifest announces `charges.read`.
393
+ */
394
+ readonly charges: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<AdminSubscriberAccount>;
390
395
  }>;
391
396
 
392
397
  /** What the promo list can be narrowed by, including its "all" state. */
@@ -684,6 +689,7 @@ declare const platformResources: {
684
689
  readonly detail: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_core.AdminTenantDetail | null>;
685
690
  readonly suspend: (http: HttpClient, ctx: ResourceContext, slug: string, reason: string, mfaCode?: string) => Promise<void>;
686
691
  readonly reactivate: (http: HttpClient, ctx: ResourceContext, slug: string, mfaCode?: string) => Promise<void>;
692
+ readonly charges: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_core.AdminSubscriberAccount>;
687
693
  }>;
688
694
  users: ResourceDef<{
689
695
  readonly list: (http: HttpClient, ctx: ResourceContext, filter?: _saasicat_core.AdminUserListFilter) => Promise<_saasicat_core.AdminUserListRow[]>;
@@ -2247,6 +2253,32 @@ declare const tenantsMessages: Record<SaBuiltinLocale, {
2247
2253
  title: string;
2248
2254
  columnEndsAt: string;
2249
2255
  };
2256
+ charges: {
2257
+ title: string;
2258
+ holder: string;
2259
+ noHolder: string;
2260
+ empty: string;
2261
+ loadFailed: string;
2262
+ columnDue: string;
2263
+ columnPeriod: string;
2264
+ columnItem: string;
2265
+ columnKind: string;
2266
+ columnOrigin: string;
2267
+ columnAmount: string;
2268
+ source: {
2269
+ plan: string;
2270
+ bundle: string;
2271
+ discount: string;
2272
+ };
2273
+ origin: {
2274
+ activation: string;
2275
+ renewal: string;
2276
+ planChange: string;
2277
+ bundleBooking: string;
2278
+ credit: string;
2279
+ correction: string;
2280
+ };
2281
+ };
2250
2282
  draft: {
2251
2283
  planModules: string;
2252
2284
  };
@@ -1,5 +1,5 @@
1
1
  import * as _saasicat_core from '@saasicat/core';
2
- import { AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/core';
2
+ import { AdminAuditListFilter, AuditEntry, TenantListFilter, TenantDto, AdminTenantDetail, AdminSubscriberAccount, PromoCodeRecord, MarketingProjectionRow, CreateMarketingProjectionData, UpdateMarketingProjectionData, MarketingSettingsRow, DiscoverySnapshot, KpiCardDef, BundleVersionRow, CreateBundleVersionDraftData, BundleVersionMutationResult, UpdateBundleVersionDraftData, BundleRow, CreateBundleData, UpdateBundleData, PlanVersionRow, CreatePlanVersionDraftData, PlanVersionMutationResult, UpdatePlanVersionDraftData, PlanRow, CreatePlanData, UpdatePlanData, StandardPageKey, AdminManifest, TenantActionDef } from '@saasicat/core';
3
3
 
4
4
  /**
5
5
  * Minimal abstraction over `fetch`. Consumers may pass their own
@@ -387,6 +387,11 @@ declare const tenantsResource: ResourceDef<{
387
387
  */
388
388
  readonly suspend: (http: HttpClient, ctx: ResourceContext, slug: string, reason: string, mfaCode?: string) => Promise<void>;
389
389
  readonly reactivate: (http: HttpClient, ctx: ResourceContext, slug: string, mfaCode?: string) => Promise<void>;
390
+ /**
391
+ * The charges of the tenant's subscriber, newest first. Served only where
392
+ * the manifest announces `charges.read`.
393
+ */
394
+ readonly charges: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<AdminSubscriberAccount>;
390
395
  }>;
391
396
 
392
397
  /** What the promo list can be narrowed by, including its "all" state. */
@@ -684,6 +689,7 @@ declare const platformResources: {
684
689
  readonly detail: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_core.AdminTenantDetail | null>;
685
690
  readonly suspend: (http: HttpClient, ctx: ResourceContext, slug: string, reason: string, mfaCode?: string) => Promise<void>;
686
691
  readonly reactivate: (http: HttpClient, ctx: ResourceContext, slug: string, mfaCode?: string) => Promise<void>;
692
+ readonly charges: (http: HttpClient, ctx: ResourceContext, slug: string) => Promise<_saasicat_core.AdminSubscriberAccount>;
687
693
  }>;
688
694
  users: ResourceDef<{
689
695
  readonly list: (http: HttpClient, ctx: ResourceContext, filter?: _saasicat_core.AdminUserListFilter) => Promise<_saasicat_core.AdminUserListRow[]>;
@@ -2247,6 +2253,32 @@ declare const tenantsMessages: Record<SaBuiltinLocale, {
2247
2253
  title: string;
2248
2254
  columnEndsAt: string;
2249
2255
  };
2256
+ charges: {
2257
+ title: string;
2258
+ holder: string;
2259
+ noHolder: string;
2260
+ empty: string;
2261
+ loadFailed: string;
2262
+ columnDue: string;
2263
+ columnPeriod: string;
2264
+ columnItem: string;
2265
+ columnKind: string;
2266
+ columnOrigin: string;
2267
+ columnAmount: string;
2268
+ source: {
2269
+ plan: string;
2270
+ bundle: string;
2271
+ discount: string;
2272
+ };
2273
+ origin: {
2274
+ activation: string;
2275
+ renewal: string;
2276
+ planChange: string;
2277
+ bundleBooking: string;
2278
+ credit: string;
2279
+ correction: string;
2280
+ };
2281
+ };
2250
2282
  draft: {
2251
2283
  planModules: string;
2252
2284
  };
@@ -904,7 +904,16 @@ var tenantsResource = defineResource("tenants", {
904
904
  method: "POST",
905
905
  headers: mfaHeader(mfaCode)
906
906
  });
907
- }
907
+ },
908
+ /**
909
+ * The charges of the tenant's subscriber, newest first. Served only where
910
+ * the manifest announces `charges.read`.
911
+ */
912
+ charges: async (http, ctx, slug) => requestJsonBody(
913
+ http,
914
+ `${tenantUrl(ctx, slug)}/charges`,
915
+ "The account returned no body"
916
+ )
908
917
  });
909
918
 
910
919
  // src/client/resources/users.resource.ts
@@ -4309,6 +4318,32 @@ var tenantsMessages = defineMessages(
4309
4318
  title: "Abonnements",
4310
4319
  columnEndsAt: "Endet"
4311
4320
  },
4321
+ charges: {
4322
+ title: "Buchungen",
4323
+ holder: "Konto von {customerNumber} \xB7 {legalName}",
4324
+ noHolder: "F\xFCr diesen Mandanten ist kein Kunde hinterlegt.",
4325
+ empty: "Noch keine Buchungen.",
4326
+ loadFailed: "Die Buchungen konnten nicht geladen werden.",
4327
+ columnDue: "F\xE4llig am",
4328
+ columnPeriod: "Zeitraum",
4329
+ columnItem: "Position",
4330
+ columnKind: "Art",
4331
+ columnOrigin: "Anlass",
4332
+ columnAmount: "Betrag netto",
4333
+ source: {
4334
+ plan: "Plan",
4335
+ bundle: "Zusatzpaket",
4336
+ discount: "Rabatt"
4337
+ },
4338
+ origin: {
4339
+ activation: "Aktivierung",
4340
+ renewal: "Verl\xE4ngerung",
4341
+ planChange: "Planwechsel",
4342
+ bundleBooking: "Zusatzbuchung",
4343
+ credit: "Gutschrift",
4344
+ correction: "Korrektur"
4345
+ }
4346
+ },
4312
4347
  draft: {
4313
4348
  planModules: "{count} Basis-Module"
4314
4349
  }
@@ -4357,6 +4392,32 @@ var tenantsMessages = defineMessages(
4357
4392
  title: "Subscriptions",
4358
4393
  columnEndsAt: "Ends"
4359
4394
  },
4395
+ charges: {
4396
+ title: "Charges",
4397
+ holder: "Account of {customerNumber} \xB7 {legalName}",
4398
+ noHolder: "No customer is on record for this tenant.",
4399
+ empty: "No charges yet.",
4400
+ loadFailed: "The charges could not be loaded.",
4401
+ columnDue: "Due",
4402
+ columnPeriod: "Period",
4403
+ columnItem: "Item",
4404
+ columnKind: "Kind",
4405
+ columnOrigin: "Reason",
4406
+ columnAmount: "Net amount",
4407
+ source: {
4408
+ plan: "Plan",
4409
+ bundle: "Add-on",
4410
+ discount: "Discount"
4411
+ },
4412
+ origin: {
4413
+ activation: "Activation",
4414
+ renewal: "Renewal",
4415
+ planChange: "Plan change",
4416
+ bundleBooking: "Add-on booking",
4417
+ credit: "Credit",
4418
+ correction: "Correction"
4419
+ }
4420
+ },
4360
4421
  draft: {
4361
4422
  planModules: "{count} base modules"
4362
4423
  }
@@ -4,7 +4,7 @@ import {
4
4
  buildRoutes,
5
5
  buildSidebar,
6
6
  defaultSectionOrder
7
- } from "./chunk-RFJ4UGOE.js";
7
+ } from "./chunk-ZY526U2H.js";
8
8
  import {
9
9
  SUPER_ADMIN_ACTIONS_KEY,
10
10
  SUPER_ADMIN_BRAND_KEY,
@@ -18,7 +18,7 @@ import {
18
18
  useResource,
19
19
  useSaMessages,
20
20
  useSuperAdminI18n
21
- } from "./chunk-7CHT2ATN.js";
21
+ } from "./chunk-7GO2PBDP.js";
22
22
  import {
23
23
  AdminError,
24
24
  BootLoader,
@@ -44,7 +44,7 @@ import {
44
44
  requireServerAnswer,
45
45
  toAdminError,
46
46
  trimTrailingSlashes
47
- } from "./chunk-CZIVA536.js";
47
+ } from "./chunk-2ISFGJ3V.js";
48
48
 
49
49
  // src/vue/status.ts
50
50
  var PROMO_STATUS_TONE = {
@@ -2602,8 +2602,24 @@ async function runFlow(def, row, registry, providers, successTemplate) {
2602
2602
  }
2603
2603
  }
2604
2604
 
2605
+ // src/vue/use-tenant-account.ts
2606
+ import { computed as computed10 } from "vue";
2607
+ import {
2608
+ SUBSCRIBER_ACCOUNT_CAPABILITY
2609
+ } from "@saasicat/core";
2610
+ function useTenantAccount(slug, manifest, tenants) {
2611
+ const available = computed10(
2612
+ () => manifest.value?.capabilities?.[SUBSCRIBER_ACCOUNT_CAPABILITY] === true
2613
+ );
2614
+ const account = useAsyncData(
2615
+ async () => available.value && slug.value ? tenants.charges(slug.value) : null,
2616
+ { initial: null, watch: [slug, available] }
2617
+ );
2618
+ return { ...account, available };
2619
+ }
2620
+
2605
2621
  // src/vue/use-platform-tenant-actions.ts
2606
- import { computed as computed10, ref as ref29 } from "vue";
2622
+ import { computed as computed11, ref as ref29 } from "vue";
2607
2623
  var DEFAULT_VISIBLE_FOR_ROW = (def, row) => {
2608
2624
  if (def.actionKey === "tenants.suspend") return row.isActive;
2609
2625
  if (def.actionKey === "tenants.reactivate") return !row.isActive;
@@ -2706,7 +2722,7 @@ function usePlatformTenantActions(options) {
2706
2722
  },
2707
2723
  visibleForRow
2708
2724
  });
2709
- const manifestActions = computed10(
2725
+ const manifestActions = computed11(
2710
2726
  () => flow.availableActions.value.map((def) => ({
2711
2727
  id: def.id,
2712
2728
  label: def.label,
@@ -2720,7 +2736,7 @@ function usePlatformTenantActions(options) {
2720
2736
  }
2721
2737
  }))
2722
2738
  );
2723
- const realOrphans = computed10(() => {
2739
+ const realOrphans = computed11(() => {
2724
2740
  const caps = options.manifest.value?.capabilities ?? {};
2725
2741
  const defs = options.manifest.value?.tenants?.actions ?? [];
2726
2742
  const defByActionKey = new Map(defs.map((d) => [d.actionKey, d]));
@@ -2928,17 +2944,17 @@ function useDialog(options) {
2928
2944
  }
2929
2945
 
2930
2946
  // src/vue/use-steps.ts
2931
- import { computed as computed11, nextTick as nextTick2, ref as ref33 } from "vue";
2947
+ import { computed as computed12, nextTick as nextTick2, ref as ref33 } from "vue";
2932
2948
  function useSteps(options) {
2933
2949
  const { steps } = options;
2934
2950
  if (steps.length === 0) throw new Error("useSteps needs at least one step");
2935
2951
  const first = steps[0];
2936
2952
  const current = ref33(first);
2937
2953
  const headingRef = ref33(null);
2938
- const index = computed11(() => steps.indexOf(current.value));
2939
- const isFirst = computed11(() => index.value <= 0);
2940
- const isLast = computed11(() => index.value === steps.length - 1);
2941
- const canAdvance = computed11(() => !isLast.value && mayLeave(current.value));
2954
+ const index = computed12(() => steps.indexOf(current.value));
2955
+ const isFirst = computed12(() => index.value <= 0);
2956
+ const isLast = computed12(() => index.value === steps.length - 1);
2957
+ const canAdvance = computed12(() => !isLast.value && mayLeave(current.value));
2942
2958
  function mayLeave(step) {
2943
2959
  return options.canLeave?.(step) ?? true;
2944
2960
  }
@@ -3224,6 +3240,7 @@ export {
3224
3240
  useNav,
3225
3241
  useActions,
3226
3242
  useTenantActionFlow,
3243
+ useTenantAccount,
3227
3244
  defaultIconForActionKey,
3228
3245
  defaultToneForActionKey,
3229
3246
  usePlatformTenantActions,
@@ -4,7 +4,7 @@ import {
4
4
  bindResource,
5
5
  createSaCatalog,
6
6
  defaultKvStore
7
- } from "./chunk-CZIVA536.js";
7
+ } from "./chunk-2ISFGJ3V.js";
8
8
 
9
9
  // src/vue/super-admin-context.ts
10
10
  var SUPER_ADMIN_BRAND_KEY = /* @__PURE__ */ Symbol.for(
@@ -4,7 +4,7 @@ import {
4
4
  markTransportFailure,
5
5
  mfaHeader,
6
6
  trimTrailingSlashes
7
- } from "./chunk-CZIVA536.js";
7
+ } from "./chunk-2ISFGJ3V.js";
8
8
 
9
9
  // src/client/version.ts
10
10
  var ADMIN_UI_VERSION = "1.2.0";
@@ -3,7 +3,7 @@ import {
3
3
  defaultHttpClient,
4
4
  isSaBuiltinLocale,
5
5
  navMessages
6
- } from "./chunk-CZIVA536.js";
6
+ } from "./chunk-2ISFGJ3V.js";
7
7
 
8
8
  // src/client/nav-builder.ts
9
9
  var DEFAULT_STANDARD_PAGE_ROUTES = {
@@ -1162,7 +1162,16 @@ var tenantsResource = defineResource("tenants", {
1162
1162
  method: "POST",
1163
1163
  headers: mfaHeader(mfaCode)
1164
1164
  });
1165
- }
1165
+ },
1166
+ /**
1167
+ * The charges of the tenant's subscriber, newest first. Served only where
1168
+ * the manifest announces `charges.read`.
1169
+ */
1170
+ charges: async (http, ctx, slug) => requestJsonBody(
1171
+ http,
1172
+ `${tenantUrl(ctx, slug)}/charges`,
1173
+ "The account returned no body"
1174
+ )
1166
1175
  });
1167
1176
 
1168
1177
  // src/client/resources/users.resource.ts
@@ -4974,6 +4983,32 @@ var tenantsMessages = defineMessages(
4974
4983
  title: "Abonnements",
4975
4984
  columnEndsAt: "Endet"
4976
4985
  },
4986
+ charges: {
4987
+ title: "Buchungen",
4988
+ holder: "Konto von {customerNumber} \xB7 {legalName}",
4989
+ noHolder: "F\xFCr diesen Mandanten ist kein Kunde hinterlegt.",
4990
+ empty: "Noch keine Buchungen.",
4991
+ loadFailed: "Die Buchungen konnten nicht geladen werden.",
4992
+ columnDue: "F\xE4llig am",
4993
+ columnPeriod: "Zeitraum",
4994
+ columnItem: "Position",
4995
+ columnKind: "Art",
4996
+ columnOrigin: "Anlass",
4997
+ columnAmount: "Betrag netto",
4998
+ source: {
4999
+ plan: "Plan",
5000
+ bundle: "Zusatzpaket",
5001
+ discount: "Rabatt"
5002
+ },
5003
+ origin: {
5004
+ activation: "Aktivierung",
5005
+ renewal: "Verl\xE4ngerung",
5006
+ planChange: "Planwechsel",
5007
+ bundleBooking: "Zusatzbuchung",
5008
+ credit: "Gutschrift",
5009
+ correction: "Korrektur"
5010
+ }
5011
+ },
4977
5012
  draft: {
4978
5013
  planModules: "{count} Basis-Module"
4979
5014
  }
@@ -5022,6 +5057,32 @@ var tenantsMessages = defineMessages(
5022
5057
  title: "Subscriptions",
5023
5058
  columnEndsAt: "Ends"
5024
5059
  },
5060
+ charges: {
5061
+ title: "Charges",
5062
+ holder: "Account of {customerNumber} \xB7 {legalName}",
5063
+ noHolder: "No customer is on record for this tenant.",
5064
+ empty: "No charges yet.",
5065
+ loadFailed: "The charges could not be loaded.",
5066
+ columnDue: "Due",
5067
+ columnPeriod: "Period",
5068
+ columnItem: "Item",
5069
+ columnKind: "Kind",
5070
+ columnOrigin: "Reason",
5071
+ columnAmount: "Net amount",
5072
+ source: {
5073
+ plan: "Plan",
5074
+ bundle: "Add-on",
5075
+ discount: "Discount"
5076
+ },
5077
+ origin: {
5078
+ activation: "Activation",
5079
+ renewal: "Renewal",
5080
+ planChange: "Plan change",
5081
+ bundleBooking: "Add-on booking",
5082
+ credit: "Credit",
5083
+ correction: "Correction"
5084
+ }
5085
+ },
5025
5086
  draft: {
5026
5087
  planModules: "{count} base modules"
5027
5088
  }
@@ -1,7 +1,7 @@
1
- import { H as HttpClient, T as ResourceDef, S as ResourceContext, y as PilotRow, u as PilotCreatePayload, v as PilotCreateResult, w as PilotEditPayload, x as PilotEditResult, f as EmailHistoryFilter, g as EmailHistoryListResult, E as EmailHistoryDetail, h as EmailHistoryResendResult, z as PlatformEmailProvider, G as PlatformEmailWriteInput, C as PlatformEmailTestInput, F as PlatformEmailTestResult, a2 as SaLocale } from '../catalog-0eZwciPW.cjs';
2
- export { A as ActionDefNotInManifestError, a as ActionHandler, b as ActionRegistry, c as AppliedSettingsView, d as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, e as DiscoveryRead, i as EmailHistoryRow, k as HttpResponse, K as KpiReading, l as KvStore, L as LIST_FIRST_PAGE, m as LIST_PAGE_SIZE_DEFAULT, n as LIST_PAGE_SIZE_MAX, o as LIST_PAGINATION_PARAMS, p as ListFilterOf, q as ListOp, r as ListQuery, M as MarketingProjectionsFilter, s as MessageTree, t as MissingHandlerError, P as PartialMessages, I as PlatformResources, J as PromoCodesFilter, N as PromoDetail, O as PublishBundleVersionOptions, Q as PublishPlanVersionOptions, R as ResolvedAction, U as ResourceListPage, V as ResourceOp, W as ResourceOps, X as SA_INTL_LOCALES, Y as SA_LOCALES, Z as SA_LOCALE_LABELS, _ as SA_MESSAGES, $ as SaBuiltinLocale, a0 as SaCatalog, a1 as SaCatalogOptions, a3 as SaLocaleDefinition, a4 as SaLocaleOption, a5 as SaMessages, a6 as SaMessagesOverrides, a7 as SettingsChangeView, a8 as SettingsDifferenceView, a9 as TenantsListFilter, aa as TranslationOf, ab as auditResource, ac as bindResource, ad as bundleVersionsResource, ae as bundlesResource, af as clampListPage, ag as clampListPageSize, ah as createSaCatalog, ai as dashboardResource, aj as defaultHttpClient, ak as defaultKvStore, al as defineListOp, am as defineMessages, an as defineResource, ao as discoveryResource, ap as filterQueryString, aq as isSaBuiltinLocale, ar as isSentInQuery, as as listUrl, at as marketingResource, au as mergeMessages, av as planVersionsResource, aw as plansResource, ax as platformResources, ay as promoCodesResource, az as readListPage, aA as resolveMessages, aB as settingsResource, aC as tenantsResource } from '../catalog-0eZwciPW.cjs';
3
- import { A as AdminError } from '../batch-column-fetcher-DQ89o95K.cjs';
4
- export { a as AdminErrorInit, B as BatchColumnData, b as BatchColumnDriftError, c as BatchColumnFetcher, d as BatchColumnFetcherOptions, e as BatchColumnRow, f as BatchColumnValue, g as BootLoadError, h as BootLoader, i as BootLoaderOptions, j as BuildRouteEntry, C as CachedManifestEntry, D as DEFAULT_STANDARD_PAGE_ROUTES, M as ManifestLoadError, k as ManifestLoader, l as ManifestLoaderOptions, N as NavBuilderOptions, P as ParamStyle, S as SidebarItem, m as SidebarSection, n as adminErrorMessage, o as buildRoutes, p as buildSidebar, q as defaultSectionOrder, r as httpStatusOf, s as isAdminError, t as isAxiosNoResponseError, u as isEmptyResponse, v as isPlatformError, w as isTransportFailure, x as markEmptyResponse, y as markPlatformError, z as markTransportFailure, E as readErrorCode, F as readErrorDetail, G as resolveExtension, H as toAdminError } from '../batch-column-fetcher-DQ89o95K.cjs';
1
+ import { H as HttpClient, T as ResourceDef, S as ResourceContext, y as PilotRow, u as PilotCreatePayload, v as PilotCreateResult, w as PilotEditPayload, x as PilotEditResult, f as EmailHistoryFilter, g as EmailHistoryListResult, E as EmailHistoryDetail, h as EmailHistoryResendResult, z as PlatformEmailProvider, G as PlatformEmailWriteInput, C as PlatformEmailTestInput, F as PlatformEmailTestResult, a2 as SaLocale } from '../catalog-BuO6O37o.cjs';
2
+ export { A as ActionDefNotInManifestError, a as ActionHandler, b as ActionRegistry, c as AppliedSettingsView, d as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, e as DiscoveryRead, i as EmailHistoryRow, k as HttpResponse, K as KpiReading, l as KvStore, L as LIST_FIRST_PAGE, m as LIST_PAGE_SIZE_DEFAULT, n as LIST_PAGE_SIZE_MAX, o as LIST_PAGINATION_PARAMS, p as ListFilterOf, q as ListOp, r as ListQuery, M as MarketingProjectionsFilter, s as MessageTree, t as MissingHandlerError, P as PartialMessages, I as PlatformResources, J as PromoCodesFilter, N as PromoDetail, O as PublishBundleVersionOptions, Q as PublishPlanVersionOptions, R as ResolvedAction, U as ResourceListPage, V as ResourceOp, W as ResourceOps, X as SA_INTL_LOCALES, Y as SA_LOCALES, Z as SA_LOCALE_LABELS, _ as SA_MESSAGES, $ as SaBuiltinLocale, a0 as SaCatalog, a1 as SaCatalogOptions, a3 as SaLocaleDefinition, a4 as SaLocaleOption, a5 as SaMessages, a6 as SaMessagesOverrides, a7 as SettingsChangeView, a8 as SettingsDifferenceView, a9 as TenantsListFilter, aa as TranslationOf, ab as auditResource, ac as bindResource, ad as bundleVersionsResource, ae as bundlesResource, af as clampListPage, ag as clampListPageSize, ah as createSaCatalog, ai as dashboardResource, aj as defaultHttpClient, ak as defaultKvStore, al as defineListOp, am as defineMessages, an as defineResource, ao as discoveryResource, ap as filterQueryString, aq as isSaBuiltinLocale, ar as isSentInQuery, as as listUrl, at as marketingResource, au as mergeMessages, av as planVersionsResource, aw as plansResource, ax as platformResources, ay as promoCodesResource, az as readListPage, aA as resolveMessages, aB as settingsResource, aC as tenantsResource } from '../catalog-BuO6O37o.cjs';
3
+ import { A as AdminError } from '../batch-column-fetcher-AxKa7wcD.cjs';
4
+ export { a as AdminErrorInit, B as BatchColumnData, b as BatchColumnDriftError, c as BatchColumnFetcher, d as BatchColumnFetcherOptions, e as BatchColumnRow, f as BatchColumnValue, g as BootLoadError, h as BootLoader, i as BootLoaderOptions, j as BuildRouteEntry, C as CachedManifestEntry, D as DEFAULT_STANDARD_PAGE_ROUTES, M as ManifestLoadError, k as ManifestLoader, l as ManifestLoaderOptions, N as NavBuilderOptions, P as ParamStyle, S as SidebarItem, m as SidebarSection, n as adminErrorMessage, o as buildRoutes, p as buildSidebar, q as defaultSectionOrder, r as httpStatusOf, s as isAdminError, t as isAxiosNoResponseError, u as isEmptyResponse, v as isPlatformError, w as isTransportFailure, x as markEmptyResponse, y as markPlatformError, z as markTransportFailure, E as readErrorCode, F as readErrorDetail, G as resolveExtension, H as toAdminError } from '../batch-column-fetcher-AxKa7wcD.cjs';
5
5
  import { CapabilityCatalogEntryRow, FeatureCatalogEntryRow, QuotaCatalogEntryRow, ReviewCatalogEntryData, CatalogEntryI18n, UpdateCatalogEntryBaseData, DiscoverySnapshot, SyncDiscoveryResult, PromotionRow, CreatePromotionData, UpdatePromotionData, AdminUserListFilter, AdminUserListRow, AdminSubscriptionListRow, PromoCodeRecord, AdminTenantDetail, AdminAuditListFilter, AuditEntry } from '@saasicat/core';
6
6
 
7
7
  /**
@@ -1,7 +1,7 @@
1
- import { H as HttpClient, T as ResourceDef, S as ResourceContext, y as PilotRow, u as PilotCreatePayload, v as PilotCreateResult, w as PilotEditPayload, x as PilotEditResult, f as EmailHistoryFilter, g as EmailHistoryListResult, E as EmailHistoryDetail, h as EmailHistoryResendResult, z as PlatformEmailProvider, G as PlatformEmailWriteInput, C as PlatformEmailTestInput, F as PlatformEmailTestResult, a2 as SaLocale } from '../catalog-0eZwciPW.js';
2
- export { A as ActionDefNotInManifestError, a as ActionHandler, b as ActionRegistry, c as AppliedSettingsView, d as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, e as DiscoveryRead, i as EmailHistoryRow, k as HttpResponse, K as KpiReading, l as KvStore, L as LIST_FIRST_PAGE, m as LIST_PAGE_SIZE_DEFAULT, n as LIST_PAGE_SIZE_MAX, o as LIST_PAGINATION_PARAMS, p as ListFilterOf, q as ListOp, r as ListQuery, M as MarketingProjectionsFilter, s as MessageTree, t as MissingHandlerError, P as PartialMessages, I as PlatformResources, J as PromoCodesFilter, N as PromoDetail, O as PublishBundleVersionOptions, Q as PublishPlanVersionOptions, R as ResolvedAction, U as ResourceListPage, V as ResourceOp, W as ResourceOps, X as SA_INTL_LOCALES, Y as SA_LOCALES, Z as SA_LOCALE_LABELS, _ as SA_MESSAGES, $ as SaBuiltinLocale, a0 as SaCatalog, a1 as SaCatalogOptions, a3 as SaLocaleDefinition, a4 as SaLocaleOption, a5 as SaMessages, a6 as SaMessagesOverrides, a7 as SettingsChangeView, a8 as SettingsDifferenceView, a9 as TenantsListFilter, aa as TranslationOf, ab as auditResource, ac as bindResource, ad as bundleVersionsResource, ae as bundlesResource, af as clampListPage, ag as clampListPageSize, ah as createSaCatalog, ai as dashboardResource, aj as defaultHttpClient, ak as defaultKvStore, al as defineListOp, am as defineMessages, an as defineResource, ao as discoveryResource, ap as filterQueryString, aq as isSaBuiltinLocale, ar as isSentInQuery, as as listUrl, at as marketingResource, au as mergeMessages, av as planVersionsResource, aw as plansResource, ax as platformResources, ay as promoCodesResource, az as readListPage, aA as resolveMessages, aB as settingsResource, aC as tenantsResource } from '../catalog-0eZwciPW.js';
3
- import { A as AdminError } from '../batch-column-fetcher-Sr48UWEX.js';
4
- export { a as AdminErrorInit, B as BatchColumnData, b as BatchColumnDriftError, c as BatchColumnFetcher, d as BatchColumnFetcherOptions, e as BatchColumnRow, f as BatchColumnValue, g as BootLoadError, h as BootLoader, i as BootLoaderOptions, j as BuildRouteEntry, C as CachedManifestEntry, D as DEFAULT_STANDARD_PAGE_ROUTES, M as ManifestLoadError, k as ManifestLoader, l as ManifestLoaderOptions, N as NavBuilderOptions, P as ParamStyle, S as SidebarItem, m as SidebarSection, n as adminErrorMessage, o as buildRoutes, p as buildSidebar, q as defaultSectionOrder, r as httpStatusOf, s as isAdminError, t as isAxiosNoResponseError, u as isEmptyResponse, v as isPlatformError, w as isTransportFailure, x as markEmptyResponse, y as markPlatformError, z as markTransportFailure, E as readErrorCode, F as readErrorDetail, G as resolveExtension, H as toAdminError } from '../batch-column-fetcher-Sr48UWEX.js';
1
+ import { H as HttpClient, T as ResourceDef, S as ResourceContext, y as PilotRow, u as PilotCreatePayload, v as PilotCreateResult, w as PilotEditPayload, x as PilotEditResult, f as EmailHistoryFilter, g as EmailHistoryListResult, E as EmailHistoryDetail, h as EmailHistoryResendResult, z as PlatformEmailProvider, G as PlatformEmailWriteInput, C as PlatformEmailTestInput, F as PlatformEmailTestResult, a2 as SaLocale } from '../catalog-BuO6O37o.js';
2
+ export { A as ActionDefNotInManifestError, a as ActionHandler, b as ActionRegistry, c as AppliedSettingsView, d as AuditListFilter, B as Bound, D as DEFAULT_SA_LOCALE, e as DiscoveryRead, i as EmailHistoryRow, k as HttpResponse, K as KpiReading, l as KvStore, L as LIST_FIRST_PAGE, m as LIST_PAGE_SIZE_DEFAULT, n as LIST_PAGE_SIZE_MAX, o as LIST_PAGINATION_PARAMS, p as ListFilterOf, q as ListOp, r as ListQuery, M as MarketingProjectionsFilter, s as MessageTree, t as MissingHandlerError, P as PartialMessages, I as PlatformResources, J as PromoCodesFilter, N as PromoDetail, O as PublishBundleVersionOptions, Q as PublishPlanVersionOptions, R as ResolvedAction, U as ResourceListPage, V as ResourceOp, W as ResourceOps, X as SA_INTL_LOCALES, Y as SA_LOCALES, Z as SA_LOCALE_LABELS, _ as SA_MESSAGES, $ as SaBuiltinLocale, a0 as SaCatalog, a1 as SaCatalogOptions, a3 as SaLocaleDefinition, a4 as SaLocaleOption, a5 as SaMessages, a6 as SaMessagesOverrides, a7 as SettingsChangeView, a8 as SettingsDifferenceView, a9 as TenantsListFilter, aa as TranslationOf, ab as auditResource, ac as bindResource, ad as bundleVersionsResource, ae as bundlesResource, af as clampListPage, ag as clampListPageSize, ah as createSaCatalog, ai as dashboardResource, aj as defaultHttpClient, ak as defaultKvStore, al as defineListOp, am as defineMessages, an as defineResource, ao as discoveryResource, ap as filterQueryString, aq as isSaBuiltinLocale, ar as isSentInQuery, as as listUrl, at as marketingResource, au as mergeMessages, av as planVersionsResource, aw as plansResource, ax as platformResources, ay as promoCodesResource, az as readListPage, aA as resolveMessages, aB as settingsResource, aC as tenantsResource } from '../catalog-BuO6O37o.js';
3
+ import { A as AdminError } from '../batch-column-fetcher-BrQLbwVk.js';
4
+ export { a as AdminErrorInit, B as BatchColumnData, b as BatchColumnDriftError, c as BatchColumnFetcher, d as BatchColumnFetcherOptions, e as BatchColumnRow, f as BatchColumnValue, g as BootLoadError, h as BootLoader, i as BootLoaderOptions, j as BuildRouteEntry, C as CachedManifestEntry, D as DEFAULT_STANDARD_PAGE_ROUTES, M as ManifestLoadError, k as ManifestLoader, l as ManifestLoaderOptions, N as NavBuilderOptions, P as ParamStyle, S as SidebarItem, m as SidebarSection, n as adminErrorMessage, o as buildRoutes, p as buildSidebar, q as defaultSectionOrder, r as httpStatusOf, s as isAdminError, t as isAxiosNoResponseError, u as isEmptyResponse, v as isPlatformError, w as isTransportFailure, x as markEmptyResponse, y as markPlatformError, z as markTransportFailure, E as readErrorCode, F as readErrorDetail, G as resolveExtension, H as toAdminError } from '../batch-column-fetcher-BrQLbwVk.js';
5
5
  import { CapabilityCatalogEntryRow, FeatureCatalogEntryRow, QuotaCatalogEntryRow, ReviewCatalogEntryData, CatalogEntryI18n, UpdateCatalogEntryBaseData, DiscoverySnapshot, SyncDiscoveryResult, PromotionRow, CreatePromotionData, UpdatePromotionData, AdminUserListFilter, AdminUserListRow, AdminSubscriptionListRow, PromoCodeRecord, AdminTenantDetail, AdminAuditListFilter, AuditEntry } from '@saasicat/core';
6
6
 
7
7
  /**
@@ -23,7 +23,7 @@ import {
23
23
  showSettingValue,
24
24
  todayIsoDate,
25
25
  trimChar
26
- } from "../chunk-47HDYN35.js";
26
+ } from "../chunk-X27PN2LA.js";
27
27
  import {
28
28
  ActionDefNotInManifestError,
29
29
  ActionRegistry,
@@ -35,7 +35,7 @@ import {
35
35
  buildSidebar,
36
36
  defaultSectionOrder,
37
37
  resolveExtension
38
- } from "../chunk-RFJ4UGOE.js";
38
+ } from "../chunk-ZY526U2H.js";
39
39
  import {
40
40
  applyBrandColour
41
41
  } from "../chunk-U7LNAX6T.js";
@@ -116,7 +116,7 @@ import {
116
116
  toAdminError,
117
117
  trimTrailingSlashes,
118
118
  usersResource
119
- } from "../chunk-CZIVA536.js";
119
+ } from "../chunk-2ISFGJ3V.js";
120
120
  export {
121
121
  ADMIN_UI_VERSION,
122
122
  ActionDefNotInManifestError,