@dainamite/cpq 0.5.0 → 0.7.0
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.
- package/CHANGELOG.md +64 -0
- package/MIGRATION.md +74 -0
- package/dist/modules/cpq/acl.js +1 -0
- package/dist/modules/cpq/acl.js.map +2 -2
- package/dist/modules/cpq/api/_helpers/adjustmentCommandRoute.js +45 -0
- package/dist/modules/cpq/api/_helpers/adjustmentCommandRoute.js.map +7 -0
- package/dist/modules/cpq/api/_helpers/quoteMutationGuard.js +23 -0
- package/dist/modules/cpq/api/_helpers/quoteMutationGuard.js.map +7 -0
- package/dist/modules/cpq/api/_helpers/quoteRouteOpenApi.js +19 -0
- package/dist/modules/cpq/api/_helpers/quoteRouteOpenApi.js.map +7 -0
- package/dist/modules/cpq/api/orders/[orderId]/route.js +17 -1
- package/dist/modules/cpq/api/orders/[orderId]/route.js.map +2 -2
- package/dist/modules/cpq/api/orders/route.js +47 -2
- package/dist/modules/cpq/api/orders/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/restore/route.js +54 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/restore/route.js.map +7 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/route.js +42 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/items/route.js +27 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/items/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/[adjustmentId]/route.js +47 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/[adjustmentId]/route.js.map +7 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/preview/route.js +30 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/preview/route.js.map +7 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/route.js +47 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/route.js.map +7 -0
- package/dist/modules/cpq/api/quotes/[quoteId]/recalculate/route.js +32 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/recalculate/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/status/route.js +33 -2
- package/dist/modules/cpq/api/quotes/[quoteId]/status/route.js.map +2 -2
- package/dist/modules/cpq/api/quotes/price/route.js +43 -3
- package/dist/modules/cpq/api/quotes/price/route.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/AssetsTable.js +3 -9
- package/dist/modules/cpq/backend/cpq/inventory/AssetsTable.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/SubscriptionsTable.js +21 -25
- package/dist/modules/cpq/backend/cpq/inventory/SubscriptionsTable.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.js +48 -47
- package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.meta.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/page.meta.js +3 -3
- package/dist/modules/cpq/backend/cpq/inventory/page.meta.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/shared.js +37 -2
- package/dist/modules/cpq/backend/cpq/inventory/shared.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.js +174 -184
- package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.meta.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/offerings/[id]/page.js +168 -143
- package/dist/modules/cpq/backend/cpq/offerings/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/offerings/page.js +36 -34
- package/dist/modules/cpq/backend/cpq/offerings/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/orders/[id]/page.js +140 -280
- package/dist/modules/cpq/backend/cpq/orders/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/orders/page.js +6 -6
- package/dist/modules/cpq/backend/cpq/orders/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/orders/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/orders/page.meta.js.map +1 -1
- package/dist/modules/cpq/backend/cpq/price-rules/PriceRuleForm.js +41 -36
- package/dist/modules/cpq/backend/cpq/price-rules/PriceRuleForm.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.js +76 -72
- package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.meta.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/price-rules/page.js +18 -15
- package/dist/modules/cpq/backend/cpq/price-rules/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.js +23 -21
- package/dist/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/[id]/ImportPreview.js +22 -50
- package/dist/modules/cpq/backend/cpq/pricing/[id]/ImportPreview.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/[id]/page.js +74 -52
- package/dist/modules/cpq/backend/cpq/pricing/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/[id]/xlsxImport.js +20 -17
- package/dist/modules/cpq/backend/cpq/pricing/[id]/xlsxImport.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/pricing/page.js +1 -1
- package/dist/modules/cpq/backend/cpq/pricing/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/ArcQuoteConfigurator.js +115 -123
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/ArcQuoteConfigurator.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentDialog.js +208 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentDialog.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentsPanel.js +79 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentsPanel.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/arcLineRemoval.js +53 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/arcLineRemoval.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/priceAdjustmentContext.js +107 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/priceAdjustmentContext.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/usePriceAdjustments.js +130 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/usePriceAdjustments.js.map +7 -0
- package/dist/modules/cpq/backend/cpq/quotes/[id]/page.js +269 -311
- package/dist/modules/cpq/backend/cpq/quotes/[id]/page.js.map +3 -3
- package/dist/modules/cpq/backend/cpq/quotes/page.js +23 -19
- package/dist/modules/cpq/backend/cpq/quotes/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/quotes/page.meta.js +1 -1
- package/dist/modules/cpq/backend/cpq/quotes/page.meta.js.map +1 -1
- package/dist/modules/cpq/backend/cpq/specifications/[id]/DependsOnRulesEditor.js +19 -15
- package/dist/modules/cpq/backend/cpq/specifications/[id]/DependsOnRulesEditor.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/specifications/[id]/page.js +171 -178
- package/dist/modules/cpq/backend/cpq/specifications/[id]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/specifications/page.js +2 -2
- package/dist/modules/cpq/backend/cpq/specifications/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/detail/page.js +60 -50
- package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/detail/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/page.js +22 -18
- package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/page.js.map +2 -2
- package/dist/modules/cpq/backend/cpq/wizards/page.js +1 -1
- package/dist/modules/cpq/backend/cpq/wizards/page.js.map +2 -2
- package/dist/modules/cpq/ce.js +8 -0
- package/dist/modules/cpq/ce.js.map +2 -2
- package/dist/modules/cpq/cli.js +34 -1
- package/dist/modules/cpq/cli.js.map +2 -2
- package/dist/modules/cpq/commands/price-adjustments.js +107 -0
- package/dist/modules/cpq/commands/price-adjustments.js.map +7 -0
- package/dist/modules/cpq/components/ArcLineDiff.js +53 -0
- package/dist/modules/cpq/components/ArcLineDiff.js.map +7 -0
- package/dist/modules/cpq/components/ChargeBreakdownTable.js +148 -0
- package/dist/modules/cpq/components/ChargeBreakdownTable.js.map +7 -0
- package/dist/modules/cpq/components/PriceWaterfall.js +68 -0
- package/dist/modules/cpq/components/PriceWaterfall.js.map +7 -0
- package/dist/modules/cpq/components/PricingSummaryCard.js +112 -0
- package/dist/modules/cpq/components/PricingSummaryCard.js.map +7 -0
- package/dist/modules/cpq/components/StatusPath.js +5 -3
- package/dist/modules/cpq/components/StatusPath.js.map +2 -2
- package/dist/modules/cpq/components/useCpqRowActions.js +10 -22
- package/dist/modules/cpq/components/useCpqRowActions.js.map +2 -2
- package/dist/modules/cpq/components/useGrantedFeatures.js +27 -0
- package/dist/modules/cpq/components/useGrantedFeatures.js.map +7 -0
- package/dist/modules/cpq/data/entities.js +97 -0
- package/dist/modules/cpq/data/entities.js.map +2 -2
- package/dist/modules/cpq/data/price-adjustments.js +70 -0
- package/dist/modules/cpq/data/price-adjustments.js.map +7 -0
- package/dist/modules/cpq/data/validators.js +4 -0
- package/dist/modules/cpq/data/validators.js.map +2 -2
- package/dist/modules/cpq/di.js +6 -0
- package/dist/modules/cpq/di.js.map +2 -2
- package/dist/modules/cpq/events.js +47 -0
- package/dist/modules/cpq/events.js.map +2 -2
- package/dist/modules/cpq/i18n/de.json +1220 -0
- package/dist/modules/cpq/i18n/en.json +1220 -0
- package/dist/modules/cpq/i18n/es.json +1220 -0
- package/dist/modules/cpq/i18n/pl.json +1220 -0
- package/dist/modules/cpq/index.js +1 -1
- package/dist/modules/cpq/index.js.map +2 -2
- package/dist/modules/cpq/lib/auditActor.js +10 -0
- package/dist/modules/cpq/lib/auditActor.js.map +7 -0
- package/dist/modules/cpq/lib/formatMoney.js +7 -0
- package/dist/modules/cpq/lib/formatMoney.js.map +7 -0
- package/dist/modules/cpq/lib/priceAdjustmentDefaults.js +60 -0
- package/dist/modules/cpq/lib/priceAdjustmentDefaults.js.map +7 -0
- package/dist/modules/cpq/lib/priceAdjustmentView.js +169 -0
- package/dist/modules/cpq/lib/priceAdjustmentView.js.map +7 -0
- package/dist/modules/cpq/lib/quotePermissions.js +13 -0
- package/dist/modules/cpq/lib/quotePermissions.js.map +7 -0
- package/dist/modules/cpq/lib/quoteSummaryView.js +28 -0
- package/dist/modules/cpq/lib/quoteSummaryView.js.map +7 -0
- package/dist/modules/cpq/migrations/Migration20261110213052.js +22 -0
- package/dist/modules/cpq/migrations/Migration20261110213052.js.map +7 -0
- package/dist/modules/cpq/services/arcLineRemoval.js +53 -0
- package/dist/modules/cpq/services/arcLineRemoval.js.map +7 -0
- package/dist/modules/cpq/services/arcPriceFreeze.js +79 -0
- package/dist/modules/cpq/services/arcPriceFreeze.js.map +7 -0
- package/dist/modules/cpq/services/cpqOrderService.js +25 -28
- package/dist/modules/cpq/services/cpqOrderService.js.map +2 -2
- package/dist/modules/cpq/services/cpqPricingService.js +7 -0
- package/dist/modules/cpq/services/cpqPricingService.js.map +2 -2
- package/dist/modules/cpq/services/cpqQuotingService.js +330 -109
- package/dist/modules/cpq/services/cpqQuotingService.js.map +2 -2
- package/dist/modules/cpq/services/orderPricingSummary.js +26 -0
- package/dist/modules/cpq/services/orderPricingSummary.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/adjustmentService.js +264 -0
- package/dist/modules/cpq/services/priceAdjustments/adjustmentService.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/chargeWaterfall.js +25 -0
- package/dist/modules/cpq/services/priceAdjustments/chargeWaterfall.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/loadQuoteAdjustments.js +38 -0
- package/dist/modules/cpq/services/priceAdjustments/loadQuoteAdjustments.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/pricingSnapshot.js +104 -0
- package/dist/modules/cpq/services/priceAdjustments/pricingSnapshot.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/quoteAdjustmentLifecycle.js +102 -0
- package/dist/modules/cpq/services/priceAdjustments/quoteAdjustmentLifecycle.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/quotePricingEvents.js +52 -0
- package/dist/modules/cpq/services/priceAdjustments/quotePricingEvents.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/quotePricingWrite.js +37 -0
- package/dist/modules/cpq/services/priceAdjustments/quotePricingWrite.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/resolveManualAdjustments.js +107 -0
- package/dist/modules/cpq/services/priceAdjustments/resolveManualAdjustments.js.map +7 -0
- package/dist/modules/cpq/services/priceAdjustments/storedAdjustmentFailure.js +30 -0
- package/dist/modules/cpq/services/priceAdjustments/storedAdjustmentFailure.js.map +7 -0
- package/dist/modules/cpq/services/types.js.map +2 -2
- package/dist/modules/cpq/setup.js +6 -0
- package/dist/modules/cpq/setup.js.map +2 -2
- package/dist/modules/cpq/widgets/injection/customer-inventory/widget.client.js +39 -31
- package/dist/modules/cpq/widgets/injection/customer-inventory/widget.client.js.map +2 -2
- package/dist/modules/cpq/widgets/injection/order-cpq-tab/widget.client.js +13 -5
- package/dist/modules/cpq/widgets/injection/order-cpq-tab/widget.client.js.map +2 -2
- package/dist/modules/cpq/widgets/injection/quote-configurator/widget.client.js +41 -21
- package/dist/modules/cpq/widgets/injection/quote-configurator/widget.client.js.map +2 -2
- package/dist/modules/cpq/widgets/injection-table.js +2 -2
- package/dist/modules/cpq/widgets/injection-table.js.map +2 -2
- package/dist/modules/cpq/workflows/WizardRunner.js +10 -8
- package/dist/modules/cpq/workflows/WizardRunner.js.map +2 -2
- package/dist/modules/cpq/workflows/WizardTrigger.js +15 -9
- package/dist/modules/cpq/workflows/WizardTrigger.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/CustomerSelectStep.js +9 -7
- package/dist/modules/cpq/workflows/steps/CustomerSelectStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/InventorySelectStep.js +9 -4
- package/dist/modules/cpq/workflows/steps/InventorySelectStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/ItemListStep.js +16 -19
- package/dist/modules/cpq/workflows/steps/ItemListStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/OfferingSelectStep.js +19 -32
- package/dist/modules/cpq/workflows/steps/OfferingSelectStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/ProductConfigureStep.js +8 -6
- package/dist/modules/cpq/workflows/steps/ProductConfigureStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/ReviewStep.js +32 -30
- package/dist/modules/cpq/workflows/steps/ReviewStep.js.map +2 -2
- package/dist/modules/cpq/workflows/steps/index.js +12 -0
- package/dist/modules/cpq/workflows/steps/index.js.map +2 -2
- package/package.json +1 -1
- package/src/modules/cpq/__integration__/TC-CPQ-ARC-012.spec.ts +134 -0
- package/src/modules/cpq/__tests__/i18n/dictionaries.test.ts +62 -0
- package/src/modules/cpq/__tests__/i18n/hardcodedStrings.test.ts +35 -0
- package/src/modules/cpq/__tests__/i18n/sourceScan.ts +109 -0
- package/src/modules/cpq/acl.ts +1 -0
- package/src/modules/cpq/api/__tests__/adjustmentRoutes.test.ts +79 -0
- package/src/modules/cpq/api/__tests__/quoteWriteGuards.test.ts +100 -0
- package/src/modules/cpq/api/_helpers/__tests__/quoteMutationGuard.test.ts +48 -0
- package/src/modules/cpq/api/_helpers/adjustmentCommandRoute.ts +45 -0
- package/src/modules/cpq/api/_helpers/quoteMutationGuard.ts +38 -0
- package/src/modules/cpq/api/_helpers/quoteRouteOpenApi.ts +19 -0
- package/src/modules/cpq/api/orders/[orderId]/route.ts +18 -0
- package/src/modules/cpq/api/orders/route.ts +51 -1
- package/src/modules/cpq/api/quotes/[quoteId]/items/[lineId]/restore/route.ts +56 -0
- package/src/modules/cpq/api/quotes/[quoteId]/items/[lineId]/route.ts +48 -1
- package/src/modules/cpq/api/quotes/[quoteId]/items/route.ts +31 -1
- package/src/modules/cpq/api/quotes/[quoteId]/price-adjustments/[adjustmentId]/route.ts +39 -0
- package/src/modules/cpq/api/quotes/[quoteId]/price-adjustments/preview/route.ts +24 -0
- package/src/modules/cpq/api/quotes/[quoteId]/price-adjustments/route.ts +40 -0
- package/src/modules/cpq/api/quotes/[quoteId]/recalculate/__tests__/route.test.ts +95 -0
- package/src/modules/cpq/api/quotes/[quoteId]/recalculate/route.ts +40 -1
- package/src/modules/cpq/api/quotes/[quoteId]/status/__tests__/route.test.ts +74 -0
- package/src/modules/cpq/api/quotes/[quoteId]/status/route.ts +37 -1
- package/src/modules/cpq/api/quotes/price/__tests__/route.test.ts +37 -0
- package/src/modules/cpq/api/quotes/price/route.ts +28 -2
- package/src/modules/cpq/backend/cpq/inventory/AssetsTable.tsx +3 -9
- package/src/modules/cpq/backend/cpq/inventory/SubscriptionsTable.tsx +22 -26
- package/src/modules/cpq/backend/cpq/inventory/assets/[id]/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/inventory/assets/[id]/page.tsx +43 -46
- package/src/modules/cpq/backend/cpq/inventory/page.meta.ts +3 -3
- package/src/modules/cpq/backend/cpq/inventory/shared.tsx +37 -1
- package/src/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.tsx +164 -120
- package/src/modules/cpq/backend/cpq/offerings/[id]/page.tsx +169 -130
- package/src/modules/cpq/backend/cpq/offerings/page.tsx +34 -24
- package/src/modules/cpq/backend/cpq/orders/[id]/page.tsx +122 -308
- package/src/modules/cpq/backend/cpq/orders/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/orders/page.tsx +6 -6
- package/src/modules/cpq/backend/cpq/price-rules/PriceRuleForm.tsx +48 -34
- package/src/modules/cpq/backend/cpq/price-rules/[id]/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/price-rules/[id]/page.tsx +76 -70
- package/src/modules/cpq/backend/cpq/price-rules/page.tsx +25 -16
- package/src/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.tsx +24 -18
- package/src/modules/cpq/backend/cpq/pricing/[id]/ImportPreview.tsx +29 -19
- package/src/modules/cpq/backend/cpq/pricing/[id]/page.tsx +95 -47
- package/src/modules/cpq/backend/cpq/pricing/[id]/xlsxImport.ts +23 -15
- package/src/modules/cpq/backend/cpq/pricing/page.tsx +1 -1
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/ArcQuoteConfigurator.tsx +111 -88
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentDialog.tsx +260 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentsPanel.tsx +124 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/__tests__/PriceAdjustmentsPanel.test.tsx +76 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/arcLineRemoval.tsx +76 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/priceAdjustmentContext.tsx +133 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/_components/usePriceAdjustments.tsx +165 -0
- package/src/modules/cpq/backend/cpq/quotes/[id]/page.tsx +304 -348
- package/src/modules/cpq/backend/cpq/quotes/page.meta.ts +1 -1
- package/src/modules/cpq/backend/cpq/quotes/page.tsx +29 -21
- package/src/modules/cpq/backend/cpq/specifications/[id]/DependsOnRulesEditor.tsx +19 -15
- package/src/modules/cpq/backend/cpq/specifications/[id]/page.tsx +171 -171
- package/src/modules/cpq/backend/cpq/specifications/page.tsx +2 -2
- package/src/modules/cpq/backend/cpq/wizards/[definitionCode]/detail/page.tsx +51 -41
- package/src/modules/cpq/backend/cpq/wizards/[definitionCode]/page.tsx +17 -13
- package/src/modules/cpq/backend/cpq/wizards/page.tsx +1 -1
- package/src/modules/cpq/ce.ts +8 -0
- package/src/modules/cpq/cli.ts +48 -1
- package/src/modules/cpq/commands/__tests__/price-adjustments.test.ts +54 -0
- package/src/modules/cpq/commands/price-adjustments.ts +90 -0
- package/src/modules/cpq/components/ArcLineDiff.tsx +87 -0
- package/src/modules/cpq/components/ChargeBreakdownTable.tsx +203 -0
- package/src/modules/cpq/components/PriceWaterfall.tsx +96 -0
- package/src/modules/cpq/components/PricingSummaryCard.tsx +128 -0
- package/src/modules/cpq/components/StatusPath.tsx +7 -4
- package/src/modules/cpq/components/__tests__/PriceWaterfall.test.tsx +38 -0
- package/src/modules/cpq/components/useCpqRowActions.tsx +17 -25
- package/src/modules/cpq/components/useGrantedFeatures.ts +35 -0
- package/src/modules/cpq/data/__tests__/price-adjustment-migration.test.ts +11 -0
- package/src/modules/cpq/data/__tests__/price-adjustments.test.ts +26 -0
- package/src/modules/cpq/data/entities.ts +83 -0
- package/src/modules/cpq/data/price-adjustments.ts +67 -0
- package/src/modules/cpq/data/validators.ts +3 -0
- package/src/modules/cpq/di.ts +6 -0
- package/src/modules/cpq/events.ts +53 -2
- package/src/modules/cpq/i18n/de.json +1220 -0
- package/src/modules/cpq/i18n/en.json +1220 -0
- package/src/modules/cpq/i18n/es.json +1220 -0
- package/src/modules/cpq/i18n/pl.json +1220 -0
- package/src/modules/cpq/index.ts +1 -1
- package/src/modules/cpq/lib/__tests__/auditActor.test.ts +12 -0
- package/src/modules/cpq/lib/__tests__/priceAdjustmentDefaults.test.ts +37 -0
- package/src/modules/cpq/lib/__tests__/priceAdjustmentView.test.ts +152 -0
- package/src/modules/cpq/lib/__tests__/quotePermissions.test.ts +30 -0
- package/src/modules/cpq/lib/__tests__/quoteSummaryView.test.ts +56 -0
- package/src/modules/cpq/lib/auditActor.ts +13 -0
- package/src/modules/cpq/lib/formatMoney.ts +4 -0
- package/src/modules/cpq/lib/priceAdjustmentDefaults.ts +36 -0
- package/src/modules/cpq/lib/priceAdjustmentView.ts +259 -0
- package/src/modules/cpq/lib/quotePermissions.ts +22 -0
- package/src/modules/cpq/lib/quoteSummaryView.ts +51 -0
- package/src/modules/cpq/migrations/.snapshot-open-mercato.json +3298 -2423
- package/src/modules/cpq/migrations/Migration20261110213052.ts +22 -0
- package/src/modules/cpq/services/__tests__/_helpers/mockEm.ts +9 -2
- package/src/modules/cpq/services/__tests__/adjustmentService.test.ts +183 -0
- package/src/modules/cpq/services/__tests__/arcLineRemoval.test.ts +109 -0
- package/src/modules/cpq/services/__tests__/arcPriceFreeze.test.ts +141 -0
- package/src/modules/cpq/services/__tests__/chargeWaterfall.test.ts +28 -0
- package/src/modules/cpq/services/__tests__/cpqOrderService.test.ts +35 -2
- package/src/modules/cpq/services/__tests__/cpqPricingService.test.ts +57 -0
- package/src/modules/cpq/services/__tests__/cpqQuotingService.arc.test.ts +237 -0
- package/src/modules/cpq/services/__tests__/cpqQuotingService.test.ts +58 -3
- package/src/modules/cpq/services/__tests__/orderPricingSummary.test.ts +50 -0
- package/src/modules/cpq/services/__tests__/pricingSnapshot.test.ts +62 -0
- package/src/modules/cpq/services/__tests__/quoteAdjustmentLifecycle.test.ts +35 -0
- package/src/modules/cpq/services/__tests__/quoteAdjustmentPricing.test.ts +65 -0
- package/src/modules/cpq/services/__tests__/quoteCloneAdjustments.test.ts +45 -0
- package/src/modules/cpq/services/__tests__/quoteDetachTargetAdjustments.test.ts +54 -0
- package/src/modules/cpq/services/__tests__/quoteEventsService.test.ts +72 -0
- package/src/modules/cpq/services/__tests__/quotePricingEvents.test.ts +126 -0
- package/src/modules/cpq/services/__tests__/quotePricingIsolation.test.ts +52 -0
- package/src/modules/cpq/services/__tests__/quotePricingWrite.test.ts +74 -0
- package/src/modules/cpq/services/__tests__/resolveManualAdjustments.test.ts +90 -0
- package/src/modules/cpq/services/__tests__/storedAdjustmentFailure.test.ts +9 -0
- package/src/modules/cpq/services/arcLineRemoval.ts +87 -0
- package/src/modules/cpq/services/arcPriceFreeze.ts +165 -0
- package/src/modules/cpq/services/cpqOrderService.ts +22 -28
- package/src/modules/cpq/services/cpqPricingService.ts +8 -0
- package/src/modules/cpq/services/cpqQuotingService.ts +374 -125
- package/src/modules/cpq/services/orderPricingSummary.ts +47 -0
- package/src/modules/cpq/services/priceAdjustments/adjustmentService.ts +249 -0
- package/src/modules/cpq/services/priceAdjustments/chargeWaterfall.ts +28 -0
- package/src/modules/cpq/services/priceAdjustments/loadQuoteAdjustments.ts +25 -0
- package/src/modules/cpq/services/priceAdjustments/pricingSnapshot.ts +86 -0
- package/src/modules/cpq/services/priceAdjustments/quoteAdjustmentLifecycle.ts +68 -0
- package/src/modules/cpq/services/priceAdjustments/quotePricingEvents.ts +94 -0
- package/src/modules/cpq/services/priceAdjustments/quotePricingWrite.ts +51 -0
- package/src/modules/cpq/services/priceAdjustments/resolveManualAdjustments.ts +116 -0
- package/src/modules/cpq/services/priceAdjustments/storedAdjustmentFailure.ts +31 -0
- package/src/modules/cpq/services/types.ts +34 -1
- package/src/modules/cpq/setup.ts +7 -1
- package/src/modules/cpq/widgets/injection/customer-inventory/widget.client.tsx +38 -31
- package/src/modules/cpq/widgets/injection/order-cpq-tab/widget.client.tsx +7 -5
- package/src/modules/cpq/widgets/injection/quote-configurator/widget.client.tsx +36 -21
- package/src/modules/cpq/widgets/injection-table.ts +8 -2
- package/src/modules/cpq/workflows/WizardRunner.tsx +8 -5
- package/src/modules/cpq/workflows/WizardTrigger.tsx +15 -9
- package/src/modules/cpq/workflows/steps/CustomerSelectStep.tsx +11 -7
- package/src/modules/cpq/workflows/steps/InventorySelectStep.tsx +9 -5
- package/src/modules/cpq/workflows/steps/ItemListStep.tsx +18 -12
- package/src/modules/cpq/workflows/steps/OfferingSelectStep.tsx +20 -16
- package/src/modules/cpq/workflows/steps/ProductConfigureStep.tsx +8 -6
- package/src/modules/cpq/workflows/steps/ReviewStep.tsx +33 -18
- package/src/modules/cpq/workflows/steps/index.ts +12 -0
- package/src/modules/cpq/workflows/types.ts +4 -0
|
@@ -0,0 +1,1220 @@
|
|
|
1
|
+
{
|
|
2
|
+
"cpq.arc.diff.after": "After",
|
|
3
|
+
"cpq.arc.diff.before": "Before",
|
|
4
|
+
"cpq.arc.diff.cancelNote": "Cancellation — item will be terminated on activation.",
|
|
5
|
+
"cpq.arc.diff.mrc": "MRC",
|
|
6
|
+
"cpq.arc.diff.nrc": "NRC",
|
|
7
|
+
"cpq.arc.diff.quantity": "Quantity",
|
|
8
|
+
"cpq.arc.diff.title": "Change Preview",
|
|
9
|
+
"cpq.charges.charge": "Charge",
|
|
10
|
+
"cpq.charges.finalTotal": "Final Total",
|
|
11
|
+
"cpq.charges.pricePerUnit": "Price/Unit",
|
|
12
|
+
"cpq.charges.pricingDetailsFor": "Pricing Details — {name}",
|
|
13
|
+
"cpq.charges.qty": "Qty",
|
|
14
|
+
"cpq.charges.range": "Range",
|
|
15
|
+
"cpq.charges.subtotal": "Subtotal",
|
|
16
|
+
"cpq.charges.tier": "Tier",
|
|
17
|
+
"cpq.charges.tierBreakdown": "Tier Breakdown",
|
|
18
|
+
"cpq.charges.tieredTotal": "Tiered Total",
|
|
19
|
+
"cpq.charges.total": "Total",
|
|
20
|
+
"cpq.charges.type": "Type",
|
|
21
|
+
"cpq.common.active": "Active",
|
|
22
|
+
"cpq.common.back": "Back",
|
|
23
|
+
"cpq.common.cancel": "Cancel",
|
|
24
|
+
"cpq.common.delete": "Delete",
|
|
25
|
+
"cpq.common.dismiss": "Dismiss",
|
|
26
|
+
"cpq.common.edit": "Edit",
|
|
27
|
+
"cpq.common.inactive": "Inactive",
|
|
28
|
+
"cpq.common.loading": "Loading...",
|
|
29
|
+
"cpq.common.no": "No",
|
|
30
|
+
"cpq.common.requestFailed": "Request failed ({status})",
|
|
31
|
+
"cpq.common.save": "Save",
|
|
32
|
+
"cpq.common.saving": "Saving...",
|
|
33
|
+
"cpq.common.yes": "Yes",
|
|
34
|
+
"cpq.inventory.actions.refresh": "Refresh",
|
|
35
|
+
"cpq.inventory.assets": "Assets",
|
|
36
|
+
"cpq.inventory.assets.detail.breadcrumb": "Asset Detail",
|
|
37
|
+
"cpq.inventory.assets.detail.charges.charge": "Charge",
|
|
38
|
+
"cpq.inventory.assets.detail.charges.qty": "Qty",
|
|
39
|
+
"cpq.inventory.assets.detail.charges.total": "Total",
|
|
40
|
+
"cpq.inventory.assets.detail.charges.type": "Type",
|
|
41
|
+
"cpq.inventory.assets.detail.charges.unitPrice": "Unit Price",
|
|
42
|
+
"cpq.inventory.assets.detail.entityType": "Asset",
|
|
43
|
+
"cpq.inventory.assets.detail.error.notFound": "Asset not found",
|
|
44
|
+
"cpq.inventory.assets.detail.error.transitionFailed": "Status transition failed",
|
|
45
|
+
"cpq.inventory.assets.detail.fields.assetType": "Asset Type",
|
|
46
|
+
"cpq.inventory.assets.detail.fields.code": "Code",
|
|
47
|
+
"cpq.inventory.assets.detail.fields.created": "Created",
|
|
48
|
+
"cpq.inventory.assets.detail.fields.currency": "Currency",
|
|
49
|
+
"cpq.inventory.assets.detail.fields.customer": "Customer",
|
|
50
|
+
"cpq.inventory.assets.detail.fields.deliveryDate": "Delivery Date",
|
|
51
|
+
"cpq.inventory.assets.detail.fields.description": "Description",
|
|
52
|
+
"cpq.inventory.assets.detail.fields.linkedSubscription": "Linked Subscription",
|
|
53
|
+
"cpq.inventory.assets.detail.fields.offering": "Offering",
|
|
54
|
+
"cpq.inventory.assets.detail.fields.product": "Product",
|
|
55
|
+
"cpq.inventory.assets.detail.fields.purchaseDate": "Purchase Date",
|
|
56
|
+
"cpq.inventory.assets.detail.fields.purchasePrice": "Purchase Price",
|
|
57
|
+
"cpq.inventory.assets.detail.fields.quantity": "Quantity",
|
|
58
|
+
"cpq.inventory.assets.detail.fields.sourceOrder": "Source Order",
|
|
59
|
+
"cpq.inventory.assets.detail.fields.sourceQuote": "Source Quote",
|
|
60
|
+
"cpq.inventory.assets.detail.fields.specification": "Specification",
|
|
61
|
+
"cpq.inventory.assets.detail.fields.status": "Status",
|
|
62
|
+
"cpq.inventory.assets.detail.loading": "Loading…",
|
|
63
|
+
"cpq.inventory.assets.detail.notFound": "Asset not found.",
|
|
64
|
+
"cpq.inventory.assets.detail.sections.charges": "Charges",
|
|
65
|
+
"cpq.inventory.assets.detail.sections.configuration": "Configuration",
|
|
66
|
+
"cpq.inventory.assets.detail.sections.details": "Asset Details",
|
|
67
|
+
"cpq.inventory.assets.detail.sections.metadata": "Metadata",
|
|
68
|
+
"cpq.inventory.assets.detail.sections.pricing": "Pricing & References",
|
|
69
|
+
"cpq.inventory.assets.detail.statusPath": "Asset status path",
|
|
70
|
+
"cpq.inventory.assets.empty": "No assets found.",
|
|
71
|
+
"cpq.inventory.assets.entityName": "asset",
|
|
72
|
+
"cpq.inventory.assets.error.load": "Failed to load assets",
|
|
73
|
+
"cpq.inventory.assets.search.placeholder": "Search assets...",
|
|
74
|
+
"cpq.inventory.assets.table.code": "Code",
|
|
75
|
+
"cpq.inventory.assets.table.created": "Created",
|
|
76
|
+
"cpq.inventory.assets.table.name": "Name",
|
|
77
|
+
"cpq.inventory.assets.table.price": "Price",
|
|
78
|
+
"cpq.inventory.assets.table.status": "Status",
|
|
79
|
+
"cpq.inventory.assets.table.type": "Type",
|
|
80
|
+
"cpq.inventory.detail.backToInventory": "Back to Customer Inventory",
|
|
81
|
+
"cpq.inventory.filters.assetType": "Asset Type",
|
|
82
|
+
"cpq.inventory.filters.billingCycle": "Billing Cycle",
|
|
83
|
+
"cpq.inventory.filters.days14": "14 days",
|
|
84
|
+
"cpq.inventory.filters.days30": "30 days",
|
|
85
|
+
"cpq.inventory.filters.days60": "60 days",
|
|
86
|
+
"cpq.inventory.filters.days7": "7 days",
|
|
87
|
+
"cpq.inventory.filters.days90": "90 days",
|
|
88
|
+
"cpq.inventory.filters.expiringWithinDays": "Expiring within (days)",
|
|
89
|
+
"cpq.inventory.filters.status": "Status",
|
|
90
|
+
"cpq.inventory.nav.title": "CPQ Subscriptions",
|
|
91
|
+
"cpq.inventory.status.active": "Active",
|
|
92
|
+
"cpq.inventory.status.cancelled": "Cancelled",
|
|
93
|
+
"cpq.inventory.status.delivered": "Delivered",
|
|
94
|
+
"cpq.inventory.status.expired": "Expired",
|
|
95
|
+
"cpq.inventory.status.pending": "Pending",
|
|
96
|
+
"cpq.inventory.status.returned": "Returned",
|
|
97
|
+
"cpq.inventory.status.suspended": "Suspended",
|
|
98
|
+
"cpq.inventory.status.terminated": "Terminated",
|
|
99
|
+
"cpq.inventory.subscriptions": "Subscriptions",
|
|
100
|
+
"cpq.inventory.subscriptions.detail.arc.amend": "Amend",
|
|
101
|
+
"cpq.inventory.subscriptions.detail.arc.cancel": "Cancel",
|
|
102
|
+
"cpq.inventory.subscriptions.detail.arc.existingQuoteConfirm": "{error}\n\nOpen the existing quote now?",
|
|
103
|
+
"cpq.inventory.subscriptions.detail.arc.existingQuoteInProgress": "Subscription has another ARC quote in progress.",
|
|
104
|
+
"cpq.inventory.subscriptions.detail.arc.renew": "Renew",
|
|
105
|
+
"cpq.inventory.subscriptions.detail.arc.startFailed": "Failed to start {type} quote: {error}",
|
|
106
|
+
"cpq.inventory.subscriptions.detail.assets.empty": "No assets linked to this subscription.",
|
|
107
|
+
"cpq.inventory.subscriptions.detail.assets.table.code": "Code",
|
|
108
|
+
"cpq.inventory.subscriptions.detail.assets.table.name": "Name",
|
|
109
|
+
"cpq.inventory.subscriptions.detail.assets.table.price": "Price",
|
|
110
|
+
"cpq.inventory.subscriptions.detail.assets.table.qty": "Qty",
|
|
111
|
+
"cpq.inventory.subscriptions.detail.assets.table.status": "Status",
|
|
112
|
+
"cpq.inventory.subscriptions.detail.assets.table.type": "Type",
|
|
113
|
+
"cpq.inventory.subscriptions.detail.assets.title": "Linked Assets ({count})",
|
|
114
|
+
"cpq.inventory.subscriptions.detail.breadcrumb": "Subscription Detail",
|
|
115
|
+
"cpq.inventory.subscriptions.detail.changeLog.action.add": "added",
|
|
116
|
+
"cpq.inventory.subscriptions.detail.changeLog.action.cancel": "removed",
|
|
117
|
+
"cpq.inventory.subscriptions.detail.changeLog.action.modify": "modified",
|
|
118
|
+
"cpq.inventory.subscriptions.detail.changeLog.deltaPerMonth": "({delta}/mo)",
|
|
119
|
+
"cpq.inventory.subscriptions.detail.changeLog.empty": "No ARC changes yet.",
|
|
120
|
+
"cpq.inventory.subscriptions.detail.changeLog.etf": "ETF: {amount} {currency}",
|
|
121
|
+
"cpq.inventory.subscriptions.detail.changeLog.item": "Item",
|
|
122
|
+
"cpq.inventory.subscriptions.detail.changeLog.mergedFrom": "Merged from {count} subscriptions",
|
|
123
|
+
"cpq.inventory.subscriptions.detail.changeLog.mergedInto": "Merged into",
|
|
124
|
+
"cpq.inventory.subscriptions.detail.changeLog.mergedIntoSubscription": "subscription {id}…",
|
|
125
|
+
"cpq.inventory.subscriptions.detail.changeLog.newItem": "New item",
|
|
126
|
+
"cpq.inventory.subscriptions.detail.changeLog.noItemChanges": "No item-level changes recorded.",
|
|
127
|
+
"cpq.inventory.subscriptions.detail.changeLog.noPriceChange": "no price change",
|
|
128
|
+
"cpq.inventory.subscriptions.detail.changeLog.order": "Order {number}",
|
|
129
|
+
"cpq.inventory.subscriptions.detail.changeLog.priceChangePerMonth": "{before} → {after}/mo",
|
|
130
|
+
"cpq.inventory.subscriptions.detail.changeLog.pricePerMonth": "{price}/mo",
|
|
131
|
+
"cpq.inventory.subscriptions.detail.changeLog.quote": "Quote {number}",
|
|
132
|
+
"cpq.inventory.subscriptions.detail.changeLog.reason": "Reason: {code}",
|
|
133
|
+
"cpq.inventory.subscriptions.detail.changeLog.reasonWithText": "Reason: {code} — {text}",
|
|
134
|
+
"cpq.inventory.subscriptions.detail.changeLog.term": "Term: {from} → {to}",
|
|
135
|
+
"cpq.inventory.subscriptions.detail.changeLog.title": "Change History ({count})",
|
|
136
|
+
"cpq.inventory.subscriptions.detail.changeLog.wasPricePerMonth": "was {price}/mo",
|
|
137
|
+
"cpq.inventory.subscriptions.detail.changeType.amend": "Amended",
|
|
138
|
+
"cpq.inventory.subscriptions.detail.changeType.cancel": "Cancelled",
|
|
139
|
+
"cpq.inventory.subscriptions.detail.changeType.created": "Created",
|
|
140
|
+
"cpq.inventory.subscriptions.detail.changeType.mergeResult": "Created from merging contracts",
|
|
141
|
+
"cpq.inventory.subscriptions.detail.changeType.mergeSource": "Merged into a new contract",
|
|
142
|
+
"cpq.inventory.subscriptions.detail.changeType.renew": "Renewed",
|
|
143
|
+
"cpq.inventory.subscriptions.detail.charges.charge": "Charge",
|
|
144
|
+
"cpq.inventory.subscriptions.detail.charges.list": "List",
|
|
145
|
+
"cpq.inventory.subscriptions.detail.charges.offer": "Offer",
|
|
146
|
+
"cpq.inventory.subscriptions.detail.charges.qty": "Qty",
|
|
147
|
+
"cpq.inventory.subscriptions.detail.charges.total": "Total",
|
|
148
|
+
"cpq.inventory.subscriptions.detail.charges.type": "Type",
|
|
149
|
+
"cpq.inventory.subscriptions.detail.entityType": "Subscription",
|
|
150
|
+
"cpq.inventory.subscriptions.detail.error.notFound": "Subscription not found",
|
|
151
|
+
"cpq.inventory.subscriptions.detail.error.transitionFailed": "Status transition failed",
|
|
152
|
+
"cpq.inventory.subscriptions.detail.fields.activated": "Activated",
|
|
153
|
+
"cpq.inventory.subscriptions.detail.fields.autoRenew": "Auto-Renew",
|
|
154
|
+
"cpq.inventory.subscriptions.detail.fields.billingCycle": "Billing Cycle",
|
|
155
|
+
"cpq.inventory.subscriptions.detail.fields.capacity": "Capacity",
|
|
156
|
+
"cpq.inventory.subscriptions.detail.fields.code": "Code",
|
|
157
|
+
"cpq.inventory.subscriptions.detail.fields.created": "Created",
|
|
158
|
+
"cpq.inventory.subscriptions.detail.fields.currency": "Currency",
|
|
159
|
+
"cpq.inventory.subscriptions.detail.fields.customer": "Customer",
|
|
160
|
+
"cpq.inventory.subscriptions.detail.fields.description": "Description",
|
|
161
|
+
"cpq.inventory.subscriptions.detail.fields.mrc": "Monthly Recurring (MRC)",
|
|
162
|
+
"cpq.inventory.subscriptions.detail.fields.nrc": "Non-Recurring (NRC)",
|
|
163
|
+
"cpq.inventory.subscriptions.detail.fields.offering": "Offering",
|
|
164
|
+
"cpq.inventory.subscriptions.detail.fields.product": "Product",
|
|
165
|
+
"cpq.inventory.subscriptions.detail.fields.quantity": "Quantity",
|
|
166
|
+
"cpq.inventory.subscriptions.detail.fields.sourceOrder": "Source Order",
|
|
167
|
+
"cpq.inventory.subscriptions.detail.fields.sourceQuote": "Source Quote",
|
|
168
|
+
"cpq.inventory.subscriptions.detail.fields.specification": "Specification",
|
|
169
|
+
"cpq.inventory.subscriptions.detail.fields.startDate": "Start Date",
|
|
170
|
+
"cpq.inventory.subscriptions.detail.fields.status": "Status",
|
|
171
|
+
"cpq.inventory.subscriptions.detail.fields.suspended": "Suspended",
|
|
172
|
+
"cpq.inventory.subscriptions.detail.fields.term": "Term",
|
|
173
|
+
"cpq.inventory.subscriptions.detail.fields.termEnd": "Term End",
|
|
174
|
+
"cpq.inventory.subscriptions.detail.fields.termMonths": "{count} months",
|
|
175
|
+
"cpq.inventory.subscriptions.detail.fields.terminated": "Terminated",
|
|
176
|
+
"cpq.inventory.subscriptions.detail.items.charges": "Charges",
|
|
177
|
+
"cpq.inventory.subscriptions.detail.items.configuration": "Configuration",
|
|
178
|
+
"cpq.inventory.subscriptions.detail.items.createdAt": "Created: {date}",
|
|
179
|
+
"cpq.inventory.subscriptions.detail.items.empty": "No items.",
|
|
180
|
+
"cpq.inventory.subscriptions.detail.items.metadata": "Metadata",
|
|
181
|
+
"cpq.inventory.subscriptions.detail.items.mrc": "MRC",
|
|
182
|
+
"cpq.inventory.subscriptions.detail.items.nrc": "NRC",
|
|
183
|
+
"cpq.inventory.subscriptions.detail.items.title": "Subscription Items ({count})",
|
|
184
|
+
"cpq.inventory.subscriptions.detail.items.updatedAt": "Updated: {date}",
|
|
185
|
+
"cpq.inventory.subscriptions.detail.loading": "Loading…",
|
|
186
|
+
"cpq.inventory.subscriptions.detail.notFound": "Subscription not found.",
|
|
187
|
+
"cpq.inventory.subscriptions.detail.sections.details": "Subscription Details",
|
|
188
|
+
"cpq.inventory.subscriptions.detail.sections.metadata": "Metadata",
|
|
189
|
+
"cpq.inventory.subscriptions.detail.sections.pricing": "Pricing & References",
|
|
190
|
+
"cpq.inventory.subscriptions.detail.statusPath": "Subscription status path",
|
|
191
|
+
"cpq.inventory.subscriptions.empty": "No subscriptions found.",
|
|
192
|
+
"cpq.inventory.subscriptions.entityName": "subscription",
|
|
193
|
+
"cpq.inventory.subscriptions.error.load": "Failed to load subscriptions",
|
|
194
|
+
"cpq.inventory.subscriptions.expiring.all": "All subscriptions",
|
|
195
|
+
"cpq.inventory.subscriptions.expiring.in14Days": "Expiring in 14 days",
|
|
196
|
+
"cpq.inventory.subscriptions.expiring.in30Days": "Expiring in 30 days",
|
|
197
|
+
"cpq.inventory.subscriptions.expiring.in60Days": "Expiring in 60 days",
|
|
198
|
+
"cpq.inventory.subscriptions.expiring.in7Days": "Expiring in 7 days",
|
|
199
|
+
"cpq.inventory.subscriptions.expiring.in90Days": "Expiring in 90 days",
|
|
200
|
+
"cpq.inventory.subscriptions.search.placeholder": "Search subscriptions...",
|
|
201
|
+
"cpq.inventory.subscriptions.table.billing": "Billing",
|
|
202
|
+
"cpq.inventory.subscriptions.table.code": "Code",
|
|
203
|
+
"cpq.inventory.subscriptions.table.mrc": "MRC",
|
|
204
|
+
"cpq.inventory.subscriptions.table.name": "Name",
|
|
205
|
+
"cpq.inventory.subscriptions.table.startDate": "Start Date",
|
|
206
|
+
"cpq.inventory.subscriptions.table.status": "Status",
|
|
207
|
+
"cpq.inventory.subscriptions.table.termEnd": "Term End",
|
|
208
|
+
"cpq.inventory.title": "Customer Inventory",
|
|
209
|
+
"cpq.lines.bundle": "bundle",
|
|
210
|
+
"cpq.lines.bundleComponents": "Bundle Components ({count})",
|
|
211
|
+
"cpq.lines.chargeType.mrc": "mrc",
|
|
212
|
+
"cpq.lines.chargeType.nrc": "nrc",
|
|
213
|
+
"cpq.lines.chargeType.usage": "usage",
|
|
214
|
+
"cpq.lines.componentCount.one": "{count} component",
|
|
215
|
+
"cpq.lines.componentCount.other": "{count} components",
|
|
216
|
+
"cpq.lines.configuration": "Configuration",
|
|
217
|
+
"cpq.lines.mrc": "MRC",
|
|
218
|
+
"cpq.lines.nrc": "NRC",
|
|
219
|
+
"cpq.lines.perUnit": "{price}/unit",
|
|
220
|
+
"cpq.lines.term.end": "End: {date}",
|
|
221
|
+
"cpq.lines.term.months": "Term: {months}mo",
|
|
222
|
+
"cpq.lines.term.start": "Start: {date}",
|
|
223
|
+
"cpq.list.actions.refresh": "Refresh",
|
|
224
|
+
"cpq.list.bulk.deleteSelected": "Delete selected",
|
|
225
|
+
"cpq.list.error.load": "Failed to load",
|
|
226
|
+
"cpq.list.search.placeholder": "Search...",
|
|
227
|
+
"cpq.offerings.add": "New Offering",
|
|
228
|
+
"cpq.offerings.addCharge": "Add Charge",
|
|
229
|
+
"cpq.offerings.bulk.addCharge": "Add Charge",
|
|
230
|
+
"cpq.offerings.bulk.error.saveChargeFor": "Failed to save charge for {name}",
|
|
231
|
+
"cpq.offerings.bulk.error.saveCharges": "Failed to save charges",
|
|
232
|
+
"cpq.offerings.bulk.fields.code": "Code",
|
|
233
|
+
"cpq.offerings.bulk.fields.codePlaceholder": "e.g. mrc-monthly",
|
|
234
|
+
"cpq.offerings.bulk.fields.currency": "Currency",
|
|
235
|
+
"cpq.offerings.bulk.fields.description": "Description",
|
|
236
|
+
"cpq.offerings.bulk.fields.descriptionPlaceholder": "User-facing charge description",
|
|
237
|
+
"cpq.offerings.bulk.fields.name": "Name",
|
|
238
|
+
"cpq.offerings.bulk.fields.namePlaceholder": "e.g. Monthly Recurring",
|
|
239
|
+
"cpq.offerings.bulk.fields.type": "Type",
|
|
240
|
+
"cpq.offerings.bulk.formTitle": "New Flat-Price Charge for",
|
|
241
|
+
"cpq.offerings.bulk.notice.flatOnly": "flat pricing only",
|
|
242
|
+
"cpq.offerings.bulk.notice.for": ". For",
|
|
243
|
+
"cpq.offerings.bulk.notice.or": "or",
|
|
244
|
+
"cpq.offerings.bulk.notice.perUnit": "per unit",
|
|
245
|
+
"cpq.offerings.bulk.notice.rest": "pricing, open each offering individually — those methods need a pricing table and a numeric attribute that lives on the offering's spec, which usually differs between offerings.",
|
|
246
|
+
"cpq.offerings.bulk.notice.supports": "Bulk creation supports",
|
|
247
|
+
"cpq.offerings.bulk.notice.tiered": "tiered",
|
|
248
|
+
"cpq.offerings.bulk.offeringsPlural": "offerings",
|
|
249
|
+
"cpq.offerings.bulk.offeringsSingular": "offering",
|
|
250
|
+
"cpq.offerings.bulk.submitPlural": "Create Charge for {count} Offerings",
|
|
251
|
+
"cpq.offerings.bulk.submitSingular": "Create Charge for {count} Offering",
|
|
252
|
+
"cpq.offerings.bulk.table.offering": "Offering",
|
|
253
|
+
"cpq.offerings.bulk.table.price": "Price ({currency})",
|
|
254
|
+
"cpq.offerings.charge.fields.chargeModel": "Charge Model",
|
|
255
|
+
"cpq.offerings.charge.fields.chargeType": "Charge Type",
|
|
256
|
+
"cpq.offerings.charge.fields.code": "Code",
|
|
257
|
+
"cpq.offerings.charge.fields.codePlaceholder": "e.g. mrc-monthly",
|
|
258
|
+
"cpq.offerings.charge.fields.currency": "Currency",
|
|
259
|
+
"cpq.offerings.charge.fields.description": "Description",
|
|
260
|
+
"cpq.offerings.charge.fields.fixedPrice": "Fixed Price",
|
|
261
|
+
"cpq.offerings.charge.fields.name": "Name",
|
|
262
|
+
"cpq.offerings.charge.fields.priceColumn": "Price Column",
|
|
263
|
+
"cpq.offerings.charge.fields.pricingMethod": "Pricing Method",
|
|
264
|
+
"cpq.offerings.charge.fields.pricingTable": "Pricing Table",
|
|
265
|
+
"cpq.offerings.charge.fields.quantityAttribute": "Quantity Attribute",
|
|
266
|
+
"cpq.offerings.charge.fields.quantityAttributeHelp": "Attribute whose value drives the quantity for pricing",
|
|
267
|
+
"cpq.offerings.charge.fields.selectAttribute": "Select attribute...",
|
|
268
|
+
"cpq.offerings.charge.fields.selectColumn": "Select column...",
|
|
269
|
+
"cpq.offerings.charge.fields.selectTable": "Select table...",
|
|
270
|
+
"cpq.offerings.charge.fields.sortOrder": "Sort Order",
|
|
271
|
+
"cpq.offerings.charge.form.editTitle": "Edit Charge",
|
|
272
|
+
"cpq.offerings.charge.form.newTitle": "New Charge",
|
|
273
|
+
"cpq.offerings.charge.missingFieldsPlural": "Missing required fields for {method} pricing: {fields}",
|
|
274
|
+
"cpq.offerings.charge.missingFieldsSingular": "Missing required field for {method} pricing: {fields}",
|
|
275
|
+
"cpq.offerings.charge.noNumberAttributes.link": "add one to the spec",
|
|
276
|
+
"cpq.offerings.charge.noNumberAttributes.prefix": "Spec has no number attributes —",
|
|
277
|
+
"cpq.offerings.charge.noNumberAttributes.suffix": "first.",
|
|
278
|
+
"cpq.offerings.charge.noPricingTables.link": "create one",
|
|
279
|
+
"cpq.offerings.charge.noPricingTables.prefix": "No pricing tables yet —",
|
|
280
|
+
"cpq.offerings.charge.noPricingTables.suffix": "before using Table Lookup pricing.",
|
|
281
|
+
"cpq.offerings.chargeModel.flat": "Flat Fee",
|
|
282
|
+
"cpq.offerings.chargeModel.perUnit": "Per Unit",
|
|
283
|
+
"cpq.offerings.chargeModel.tiered": "Tiered",
|
|
284
|
+
"cpq.offerings.chargeModel.volume": "Volume-based",
|
|
285
|
+
"cpq.offerings.chargeType.mrc": "MRC (Monthly Recurring)",
|
|
286
|
+
"cpq.offerings.chargeType.nrc": "NRC (Non-Recurring)",
|
|
287
|
+
"cpq.offerings.chargeType.usage": "Usage",
|
|
288
|
+
"cpq.offerings.charges": "Charges",
|
|
289
|
+
"cpq.offerings.charges.columns.actions": "Actions",
|
|
290
|
+
"cpq.offerings.charges.columns.active": "Active",
|
|
291
|
+
"cpq.offerings.charges.columns.code": "Code",
|
|
292
|
+
"cpq.offerings.charges.columns.name": "Name",
|
|
293
|
+
"cpq.offerings.charges.columns.price": "Price",
|
|
294
|
+
"cpq.offerings.charges.columns.pricing": "Pricing",
|
|
295
|
+
"cpq.offerings.charges.columns.type": "Type",
|
|
296
|
+
"cpq.offerings.charges.empty": "No charges defined. Add recurring, non-recurring, or usage charges to this offering.",
|
|
297
|
+
"cpq.offerings.charges.incomplete": "Incomplete",
|
|
298
|
+
"cpq.offerings.charges.missing": "missing",
|
|
299
|
+
"cpq.offerings.charges.qtyLabel": "× Qty:",
|
|
300
|
+
"cpq.offerings.charges.tableLabel": "Table:",
|
|
301
|
+
"cpq.offerings.code": "Code",
|
|
302
|
+
"cpq.offerings.components.add": "+ Add Component",
|
|
303
|
+
"cpq.offerings.components.addSubmit": "Add",
|
|
304
|
+
"cpq.offerings.components.adding": "Adding...",
|
|
305
|
+
"cpq.offerings.components.bundleSuffix": " [bundle]",
|
|
306
|
+
"cpq.offerings.components.columns.actions": "Actions",
|
|
307
|
+
"cpq.offerings.components.columns.code": "Code",
|
|
308
|
+
"cpq.offerings.components.columns.default": "Default",
|
|
309
|
+
"cpq.offerings.components.columns.offering": "Offering",
|
|
310
|
+
"cpq.offerings.components.columns.type": "Type",
|
|
311
|
+
"cpq.offerings.components.confirmRemove": "Remove this component from the bundle?",
|
|
312
|
+
"cpq.offerings.components.emptySlot": "No components assigned to this slot",
|
|
313
|
+
"cpq.offerings.components.error.add": "Failed to add component",
|
|
314
|
+
"cpq.offerings.components.error.remove": "Failed to remove",
|
|
315
|
+
"cpq.offerings.components.error.removeComponent": "Failed to remove component",
|
|
316
|
+
"cpq.offerings.components.fields.componentOffering": "Component Offering",
|
|
317
|
+
"cpq.offerings.components.fields.isDefault": "Default?",
|
|
318
|
+
"cpq.offerings.components.fields.isDefaultHelp": "Pre-selected in quote",
|
|
319
|
+
"cpq.offerings.components.fields.selectOffering": "— Select offering —",
|
|
320
|
+
"cpq.offerings.components.noSlots": "No bundle slots defined on this specification. Add slots on the specification first.",
|
|
321
|
+
"cpq.offerings.components.remove": "Remove",
|
|
322
|
+
"cpq.offerings.components.requiredMin": "(required: min {min})",
|
|
323
|
+
"cpq.offerings.components.tag.bundle": "bundle",
|
|
324
|
+
"cpq.offerings.components.tag.simple": "simple",
|
|
325
|
+
"cpq.offerings.components.unknown": "Unknown",
|
|
326
|
+
"cpq.offerings.confirmDelete": "Delete this offering and all its charges?",
|
|
327
|
+
"cpq.offerings.description": "Description",
|
|
328
|
+
"cpq.offerings.detail.codePlaceholder": "e.g. gix-cloud-connect-aws",
|
|
329
|
+
"cpq.offerings.detail.confirmDeleteCharge": "Delete this charge?",
|
|
330
|
+
"cpq.offerings.detail.designTimeValues": "Design-Time Values",
|
|
331
|
+
"cpq.offerings.detail.error.delete": "Failed to delete",
|
|
332
|
+
"cpq.offerings.detail.error.deleteCharge": "Failed to delete charge",
|
|
333
|
+
"cpq.offerings.detail.error.load": "Failed to load offering",
|
|
334
|
+
"cpq.offerings.detail.error.loadGeneric": "Failed to load",
|
|
335
|
+
"cpq.offerings.detail.error.save": "Failed to save",
|
|
336
|
+
"cpq.offerings.detail.error.saveCharge": "Failed to save charge",
|
|
337
|
+
"cpq.offerings.detail.selectAttribute": "Select {name}...",
|
|
338
|
+
"cpq.offerings.detail.selectSpecification": "Select a specification...",
|
|
339
|
+
"cpq.offerings.detail.specLabel": "Spec:",
|
|
340
|
+
"cpq.offerings.detail.specification": "Specification",
|
|
341
|
+
"cpq.offerings.detail.tabs.charges": "Charges ({count})",
|
|
342
|
+
"cpq.offerings.detail.tabs.components": "Components ({count})",
|
|
343
|
+
"cpq.offerings.detail.tabs.general": "General",
|
|
344
|
+
"cpq.offerings.empty": "No product offerings found. Create one to define a sellable variant of a product specification.",
|
|
345
|
+
"cpq.offerings.entityName": "offering",
|
|
346
|
+
"cpq.offerings.filters.isActive": "Active",
|
|
347
|
+
"cpq.offerings.filters.lifecycleStatus": "Lifecycle Status",
|
|
348
|
+
"cpq.offerings.filters.offeringType": "Type",
|
|
349
|
+
"cpq.offerings.flash.chargesCreated": "Charges created",
|
|
350
|
+
"cpq.offerings.isActive": "Is Active?",
|
|
351
|
+
"cpq.offerings.lifecycle.active": "Active",
|
|
352
|
+
"cpq.offerings.lifecycle.deprecated": "Deprecated",
|
|
353
|
+
"cpq.offerings.lifecycle.draft": "Draft",
|
|
354
|
+
"cpq.offerings.lifecycleStatus": "Lifecycle Status",
|
|
355
|
+
"cpq.offerings.list.chargePopover.pricing": "Pricing: {method}",
|
|
356
|
+
"cpq.offerings.list.error.load": "Failed to load offerings",
|
|
357
|
+
"cpq.offerings.list.tag.bundle": "bundle",
|
|
358
|
+
"cpq.offerings.list.title": "Product Offerings",
|
|
359
|
+
"cpq.offerings.name": "Name",
|
|
360
|
+
"cpq.offerings.new": "New Offering",
|
|
361
|
+
"cpq.offerings.pricingMethod.fixed": "Fixed Price",
|
|
362
|
+
"cpq.offerings.pricingMethod.table": "Table Lookup",
|
|
363
|
+
"cpq.offerings.search.placeholder": "Search offerings...",
|
|
364
|
+
"cpq.offerings.type.bundle": "Bundle",
|
|
365
|
+
"cpq.offerings.type.simple": "Simple",
|
|
366
|
+
"cpq.orders.actions.open": "Open",
|
|
367
|
+
"cpq.orders.detail.activate": "Activate",
|
|
368
|
+
"cpq.orders.detail.activatedOn": "Activated on {date}",
|
|
369
|
+
"cpq.orders.detail.backLabel": "Back to CPQ Orders",
|
|
370
|
+
"cpq.orders.detail.backToOrders": "← Back to Orders",
|
|
371
|
+
"cpq.orders.detail.entityType": "CPQ Order",
|
|
372
|
+
"cpq.orders.detail.lineItems": "Line Items ({count})",
|
|
373
|
+
"cpq.orders.detail.linkedSubscription": "Linked Subscription",
|
|
374
|
+
"cpq.orders.detail.loading": "Loading…",
|
|
375
|
+
"cpq.orders.detail.meta.created": "Created",
|
|
376
|
+
"cpq.orders.detail.meta.currency": "Currency",
|
|
377
|
+
"cpq.orders.detail.meta.customer": "Customer",
|
|
378
|
+
"cpq.orders.detail.mirroredItem": "Mirrored from existing subscription item.",
|
|
379
|
+
"cpq.orders.detail.noBreakdown": "No detailed breakdown for this line.",
|
|
380
|
+
"cpq.orders.detail.noLineItems": "No line items.",
|
|
381
|
+
"cpq.orders.detail.notFound": "Order not found.",
|
|
382
|
+
"cpq.orders.detail.sourceQuote": "Source Quote",
|
|
383
|
+
"cpq.orders.detail.statusPath": "Order status path",
|
|
384
|
+
"cpq.orders.detail.viewSalesOrder": "View Sales Order",
|
|
385
|
+
"cpq.orders.empty": "No CPQ orders found. Convert an accepted quote to create an order.",
|
|
386
|
+
"cpq.orders.filters.currency": "Currency",
|
|
387
|
+
"cpq.orders.filters.status": "Status",
|
|
388
|
+
"cpq.orders.list.error.load": "Failed to load orders",
|
|
389
|
+
"cpq.orders.list.title": "CPQ Orders",
|
|
390
|
+
"cpq.orders.search.placeholder": "Search by order / customer id...",
|
|
391
|
+
"cpq.orders.status.active": "Active",
|
|
392
|
+
"cpq.orders.status.cancelled": "Cancelled",
|
|
393
|
+
"cpq.orders.status.draft": "Draft",
|
|
394
|
+
"cpq.orders.status.fulfilled": "Fulfilled",
|
|
395
|
+
"cpq.orders.status.pending_activation": "Pending Activation",
|
|
396
|
+
"cpq.orders.table.activatedAt": "Activated",
|
|
397
|
+
"cpq.orders.table.createdAt": "Created",
|
|
398
|
+
"cpq.orders.table.currency": "Currency",
|
|
399
|
+
"cpq.orders.table.mrcTotal": "MRC Total",
|
|
400
|
+
"cpq.orders.table.nrcTotal": "NRC Total",
|
|
401
|
+
"cpq.orders.table.order": "Order",
|
|
402
|
+
"cpq.orders.table.status": "Status",
|
|
403
|
+
"cpq.orders.title": "CPQ Orders",
|
|
404
|
+
"cpq.priceAdjustments.adjustPrice": "Adjust price",
|
|
405
|
+
"cpq.priceAdjustments.audit.adjust": "Adjust quote price",
|
|
406
|
+
"cpq.priceAdjustments.blocked.converted": "This quote has been converted to an order",
|
|
407
|
+
"cpq.priceAdjustments.blocked.disabled": "Manual price adjustments are turned off",
|
|
408
|
+
"cpq.priceAdjustments.blocked.freeForm": "Free-form lines cannot be adjusted",
|
|
409
|
+
"cpq.priceAdjustments.blocked.loading": "Loading…",
|
|
410
|
+
"cpq.priceAdjustments.blocked.locked": "Adjustments are locked in status {status} — move the quote back to Ready to change them",
|
|
411
|
+
"cpq.priceAdjustments.blocked.mirror": "Price changes on existing subscription items arrive with a later release",
|
|
412
|
+
"cpq.priceAdjustments.blocked.permission": "You do not have permission to adjust prices",
|
|
413
|
+
"cpq.priceAdjustments.delete": "Delete adjustment",
|
|
414
|
+
"cpq.priceAdjustments.deleteConfirm.confirm": "Remove",
|
|
415
|
+
"cpq.priceAdjustments.deleteConfirm.text": "The charge goes back to its standard price.",
|
|
416
|
+
"cpq.priceAdjustments.deleteConfirm.title": "Remove this price adjustment?",
|
|
417
|
+
"cpq.priceAdjustments.dialog.absoluteHint": "Amount taken off this charge’s total",
|
|
418
|
+
"cpq.priceAdjustments.dialog.allCharges": "All one-time and recurring charges",
|
|
419
|
+
"cpq.priceAdjustments.dialog.appliesTo": "Applies to",
|
|
420
|
+
"cpq.priceAdjustments.dialog.cancel": "Cancel",
|
|
421
|
+
"cpq.priceAdjustments.dialog.chargeTitle": "Adjust price",
|
|
422
|
+
"cpq.priceAdjustments.dialog.editTitle": "Edit price adjustment",
|
|
423
|
+
"cpq.priceAdjustments.dialog.lineTitle": "Discount line",
|
|
424
|
+
"cpq.priceAdjustments.dialog.mrcOnly": "Recurring charges only",
|
|
425
|
+
"cpq.priceAdjustments.dialog.note": "Note",
|
|
426
|
+
"cpq.priceAdjustments.dialog.nrcOnly": "One-time charges only",
|
|
427
|
+
"cpq.priceAdjustments.dialog.overrideHint": "New unit price, at most the standard price",
|
|
428
|
+
"cpq.priceAdjustments.dialog.percentHint": "Percent off the standard price (0–100)",
|
|
429
|
+
"cpq.priceAdjustments.dialog.previewCharge": "New offer price",
|
|
430
|
+
"cpq.priceAdjustments.dialog.previewEmpty": "Enter a value and reason to preview the new price.",
|
|
431
|
+
"cpq.priceAdjustments.dialog.previewLine": "Line totals",
|
|
432
|
+
"cpq.priceAdjustments.dialog.previewing": "Calculating…",
|
|
433
|
+
"cpq.priceAdjustments.dialog.reason": "Reason",
|
|
434
|
+
"cpq.priceAdjustments.dialog.reasonPlaceholder": "Pick a reason",
|
|
435
|
+
"cpq.priceAdjustments.dialog.reload": "Reload",
|
|
436
|
+
"cpq.priceAdjustments.dialog.save": "Save",
|
|
437
|
+
"cpq.priceAdjustments.dialog.saveShortcut": "Ctrl/Cmd+Enter",
|
|
438
|
+
"cpq.priceAdjustments.dialog.saving": "Saving…",
|
|
439
|
+
"cpq.priceAdjustments.dialog.standard": "Standard",
|
|
440
|
+
"cpq.priceAdjustments.dialog.type": "Adjustment",
|
|
441
|
+
"cpq.priceAdjustments.dialog.types.discount_absolute": "Amount off the charge total",
|
|
442
|
+
"cpq.priceAdjustments.dialog.types.discount_percent": "Percentage discount",
|
|
443
|
+
"cpq.priceAdjustments.dialog.types.price_override": "Set a new unit price",
|
|
444
|
+
"cpq.priceAdjustments.dialog.value": "Value",
|
|
445
|
+
"cpq.priceAdjustments.discountLine": "Discount line",
|
|
446
|
+
"cpq.priceAdjustments.edit": "Edit adjustment",
|
|
447
|
+
"cpq.priceAdjustments.errors.ABOVE_STANDARD": "The price is above the standard price",
|
|
448
|
+
"cpq.priceAdjustments.errors.ADJUSTMENT_LOCKED": "Adjustments are locked for this quote",
|
|
449
|
+
"cpq.priceAdjustments.errors.ADJUSTMENT_OVERLAP": "Another adjustment already targets this charge at the same level",
|
|
450
|
+
"cpq.priceAdjustments.errors.ADJUSTMENT_TARGET_MISSING": "The adjusted charge no longer exists on this line",
|
|
451
|
+
"cpq.priceAdjustments.errors.CURRENCY_MISMATCH": "The currency does not match the quote",
|
|
452
|
+
"cpq.priceAdjustments.errors.INVALID_AMOUNT": "Enter an amount above 0",
|
|
453
|
+
"cpq.priceAdjustments.errors.INVALID_PERCENT": "Enter a percentage above 0 and up to 100",
|
|
454
|
+
"cpq.priceAdjustments.errors.LINE_NOT_ELIGIBLE": "This line cannot be adjusted",
|
|
455
|
+
"cpq.priceAdjustments.errors.REASON_NOTE_REQUIRED": "Add a note when the reason is “Other”",
|
|
456
|
+
"cpq.priceAdjustments.errors.REASON_NOT_FOUND": "Pick a reason from the list",
|
|
457
|
+
"cpq.priceAdjustments.errors.STALE_REVISION": "Prices changed since you opened this — reload and try again",
|
|
458
|
+
"cpq.priceAdjustments.errors.TARGET_AMBIGUOUS": "The adjusted charge appears more than once on this line",
|
|
459
|
+
"cpq.priceAdjustments.errors.TYPE_NOT_ALLOWED": "This kind of adjustment is not allowed for this charge",
|
|
460
|
+
"cpq.priceAdjustments.invalid": "Invalid",
|
|
461
|
+
"cpq.priceAdjustments.invalidReason": "Invalid: {reason}",
|
|
462
|
+
"cpq.priceAdjustments.listUnit": "List",
|
|
463
|
+
"cpq.priceAdjustments.listUnitHint": "Catalog unit price from the pricing table, before any price rules or manual adjustments.",
|
|
464
|
+
"cpq.priceAdjustments.offerUnit": "Offer",
|
|
465
|
+
"cpq.priceAdjustments.offerUnitHint": "Final unit price quoted to the customer, after price rules and manual adjustments. The badge shows the total change vs list.",
|
|
466
|
+
"cpq.priceAdjustments.panel.author": "Author",
|
|
467
|
+
"cpq.priceAdjustments.panel.date": "Date",
|
|
468
|
+
"cpq.priceAdjustments.panel.empty": "No negotiated prices yet. Use “Adjust price” on a charge or “Discount line” on a line.",
|
|
469
|
+
"cpq.priceAdjustments.panel.line": "whole line",
|
|
470
|
+
"cpq.priceAdjustments.panel.lineMrc": "whole line, recurring",
|
|
471
|
+
"cpq.priceAdjustments.panel.lineNrc": "whole line, one-time",
|
|
472
|
+
"cpq.priceAdjustments.panel.reason": "Reason",
|
|
473
|
+
"cpq.priceAdjustments.panel.removedLine": "Removed line",
|
|
474
|
+
"cpq.priceAdjustments.panel.target": "Applies to",
|
|
475
|
+
"cpq.priceAdjustments.panel.title": "Price adjustments",
|
|
476
|
+
"cpq.priceAdjustments.panel.type": "Type",
|
|
477
|
+
"cpq.priceAdjustments.panel.types.discount_absolute": "Amount off",
|
|
478
|
+
"cpq.priceAdjustments.panel.types.discount_percent": "% discount",
|
|
479
|
+
"cpq.priceAdjustments.panel.types.price_override": "Price override",
|
|
480
|
+
"cpq.priceAdjustments.panel.value": "Value",
|
|
481
|
+
"cpq.priceAdjustments.showBreakdown": "Show price breakdown",
|
|
482
|
+
"cpq.priceAdjustments.standardUnit": "Standard",
|
|
483
|
+
"cpq.priceAdjustments.standardUnitHint": "Unit price after automatic price rules (e.g. volume or segment discounts), before manual adjustments.",
|
|
484
|
+
"cpq.priceAdjustments.summary.dealValue": "Deal value",
|
|
485
|
+
"cpq.priceAdjustments.summary.hint": "Deal value counts recurring charges over the term plus one-time charges; existing subscription items on change quotes are excluded.",
|
|
486
|
+
"cpq.priceAdjustments.types.discount_absolute": "amount off",
|
|
487
|
+
"cpq.priceAdjustments.types.discount_percent": "% discount",
|
|
488
|
+
"cpq.priceAdjustments.types.price_override": "price override",
|
|
489
|
+
"cpq.priceAdjustments.types.surcharge_absolute": "fixed surcharge",
|
|
490
|
+
"cpq.priceAdjustments.types.surcharge_percent": "% surcharge",
|
|
491
|
+
"cpq.priceAdjustments.waterfall.delta": "Delta",
|
|
492
|
+
"cpq.priceAdjustments.waterfall.list": "List price",
|
|
493
|
+
"cpq.priceAdjustments.waterfall.manualSource": "Negotiated: {reason}",
|
|
494
|
+
"cpq.priceAdjustments.waterfall.offer": "Offer price",
|
|
495
|
+
"cpq.priceAdjustments.waterfall.ruleSource": "Price rule: {name}",
|
|
496
|
+
"cpq.priceAdjustments.waterfall.source": "Source",
|
|
497
|
+
"cpq.priceAdjustments.waterfall.standard": "Standard price",
|
|
498
|
+
"cpq.priceAdjustments.waterfall.step": "Step",
|
|
499
|
+
"cpq.priceAdjustments.waterfall.title": "Price waterfall",
|
|
500
|
+
"cpq.priceAdjustments.waterfall.unitPrice": "Unit price",
|
|
501
|
+
"cpq.priceAdjustments.waterfall.value": "Value",
|
|
502
|
+
"cpq.priceRules.chargeTypes.mrc": "MRC",
|
|
503
|
+
"cpq.priceRules.chargeTypes.nrc": "NRC",
|
|
504
|
+
"cpq.priceRules.chargeTypes.usage": "Usage",
|
|
505
|
+
"cpq.priceRules.create": "Create Rule",
|
|
506
|
+
"cpq.priceRules.detail.activate": "Activate",
|
|
507
|
+
"cpq.priceRules.detail.allCharges": "All charges",
|
|
508
|
+
"cpq.priceRules.detail.allTypes": "All types",
|
|
509
|
+
"cpq.priceRules.detail.applicabilityCondition": "Applicability Condition",
|
|
510
|
+
"cpq.priceRules.detail.backToList": "Back to Price Rules",
|
|
511
|
+
"cpq.priceRules.detail.breadcrumb": "Rule Detail",
|
|
512
|
+
"cpq.priceRules.detail.chargeCode": "Charge Code",
|
|
513
|
+
"cpq.priceRules.detail.chargeType": "Charge Type",
|
|
514
|
+
"cpq.priceRules.detail.code": "Code",
|
|
515
|
+
"cpq.priceRules.detail.confirmDelete": "Yes, Delete",
|
|
516
|
+
"cpq.priceRules.detail.created": "Created",
|
|
517
|
+
"cpq.priceRules.detail.deactivate": "Deactivate",
|
|
518
|
+
"cpq.priceRules.detail.deleteConfirm": "Are you sure you want to delete {name}?",
|
|
519
|
+
"cpq.priceRules.detail.deleting": "Deleting...",
|
|
520
|
+
"cpq.priceRules.detail.description": "Description",
|
|
521
|
+
"cpq.priceRules.detail.globalAllOfferings": "Global (all offerings)",
|
|
522
|
+
"cpq.priceRules.detail.id": "ID",
|
|
523
|
+
"cpq.priceRules.detail.metadata": "Metadata",
|
|
524
|
+
"cpq.priceRules.detail.noCondition": "No condition (always applies)",
|
|
525
|
+
"cpq.priceRules.detail.notFound": "Not found",
|
|
526
|
+
"cpq.priceRules.detail.ruleConfiguration": "Rule Configuration",
|
|
527
|
+
"cpq.priceRules.detail.ruleNotFound": "Rule not found",
|
|
528
|
+
"cpq.priceRules.detail.ruleType": "Rule Type",
|
|
529
|
+
"cpq.priceRules.detail.saveChanges": "Save Changes",
|
|
530
|
+
"cpq.priceRules.detail.scope": "Scope",
|
|
531
|
+
"cpq.priceRules.detail.scopeAndFilters": "Scope & Filters",
|
|
532
|
+
"cpq.priceRules.detail.sortOrder": "Sort Order",
|
|
533
|
+
"cpq.priceRules.detail.updated": "Updated",
|
|
534
|
+
"cpq.priceRules.detail.value": "Value",
|
|
535
|
+
"cpq.priceRules.empty": "No price rules found. Click \"Create Rule\" to add one.",
|
|
536
|
+
"cpq.priceRules.entityName": "price rule",
|
|
537
|
+
"cpq.priceRules.errors.createFailed": "Failed to create",
|
|
538
|
+
"cpq.priceRules.errors.unknown": "Unknown error",
|
|
539
|
+
"cpq.priceRules.errors.updateFailed": "Failed to update",
|
|
540
|
+
"cpq.priceRules.filters.chargeType": "Charge Type",
|
|
541
|
+
"cpq.priceRules.filters.globalOnly": "Global only",
|
|
542
|
+
"cpq.priceRules.filters.isActive": "Active",
|
|
543
|
+
"cpq.priceRules.filters.ruleType": "Rule Type",
|
|
544
|
+
"cpq.priceRules.form.allChargeTypes": "All charge types",
|
|
545
|
+
"cpq.priceRules.form.applicabilityCondition": "Applicability Condition",
|
|
546
|
+
"cpq.priceRules.form.applicabilityConditionHint": "(optional — only apply when a product attribute matches)",
|
|
547
|
+
"cpq.priceRules.form.chargeCodeFilter": "Charge Code Filter",
|
|
548
|
+
"cpq.priceRules.form.chargeCodeFilterPlaceholder": "e.g. setup_fee (leave empty for all)",
|
|
549
|
+
"cpq.priceRules.form.chargeTypeFilter": "Charge Type Filter",
|
|
550
|
+
"cpq.priceRules.form.code": "Code",
|
|
551
|
+
"cpq.priceRules.form.conditionAttributePlaceholder": "Attribute (e.g. port_size)",
|
|
552
|
+
"cpq.priceRules.form.conditionValuePlaceholder": "Value (e.g. 100G)",
|
|
553
|
+
"cpq.priceRules.form.conditionValuePlaceholderShort": "Value",
|
|
554
|
+
"cpq.priceRules.form.create": "Create",
|
|
555
|
+
"cpq.priceRules.form.description": "Description",
|
|
556
|
+
"cpq.priceRules.form.descriptionPlaceholder": "Optional",
|
|
557
|
+
"cpq.priceRules.form.editTitle": "Edit Rule",
|
|
558
|
+
"cpq.priceRules.form.globalAllProducts": "Global (all products)",
|
|
559
|
+
"cpq.priceRules.form.mrcOnly": "MRC only",
|
|
560
|
+
"cpq.priceRules.form.name": "Name",
|
|
561
|
+
"cpq.priceRules.form.newTitle": "New Rule",
|
|
562
|
+
"cpq.priceRules.form.nrcOnly": "NRC only",
|
|
563
|
+
"cpq.priceRules.form.operatorEq": "equals (=)",
|
|
564
|
+
"cpq.priceRules.form.operatorNeq": "not equals (≠)",
|
|
565
|
+
"cpq.priceRules.form.optionalHint": "(optional)",
|
|
566
|
+
"cpq.priceRules.form.productOffering": "Product Offering",
|
|
567
|
+
"cpq.priceRules.form.productOfferingHint": "Leave as \"Global\" to apply to all products, or select a specific offering",
|
|
568
|
+
"cpq.priceRules.form.ruleType": "Rule Type",
|
|
569
|
+
"cpq.priceRules.form.sortOrder": "Sort Order",
|
|
570
|
+
"cpq.priceRules.form.update": "Update",
|
|
571
|
+
"cpq.priceRules.form.usageOnly": "Usage only",
|
|
572
|
+
"cpq.priceRules.form.value": "Value",
|
|
573
|
+
"cpq.priceRules.list.error.load": "Failed to load price rules",
|
|
574
|
+
"cpq.priceRules.list.title": "Price Rules",
|
|
575
|
+
"cpq.priceRules.ruleTypes.discountAbsolute": "Discount $",
|
|
576
|
+
"cpq.priceRules.ruleTypes.discountPercent": "Discount %",
|
|
577
|
+
"cpq.priceRules.ruleTypes.priceOverride": "Override",
|
|
578
|
+
"cpq.priceRules.ruleTypes.surchargeAbsolute": "Surcharge $",
|
|
579
|
+
"cpq.priceRules.ruleTypes.surchargePercent": "Surcharge %",
|
|
580
|
+
"cpq.priceRules.scope.global": "Global",
|
|
581
|
+
"cpq.priceRules.scope.productScoped": "Product-scoped",
|
|
582
|
+
"cpq.priceRules.search.placeholder": "Search price rules...",
|
|
583
|
+
"cpq.priceRules.table.code": "Code",
|
|
584
|
+
"cpq.priceRules.table.filter": "Filter",
|
|
585
|
+
"cpq.priceRules.table.name": "Name",
|
|
586
|
+
"cpq.priceRules.table.order": "Order",
|
|
587
|
+
"cpq.priceRules.table.scope": "Scope",
|
|
588
|
+
"cpq.priceRules.table.status": "Status",
|
|
589
|
+
"cpq.priceRules.table.type": "Type",
|
|
590
|
+
"cpq.priceRules.table.value": "Value",
|
|
591
|
+
"cpq.pricing.add": "New Pricing Table",
|
|
592
|
+
"cpq.pricing.code": "Code",
|
|
593
|
+
"cpq.pricing.confirmDelete": "Delete this pricing table and all its entries?",
|
|
594
|
+
"cpq.pricing.currencies": "Currencies",
|
|
595
|
+
"cpq.pricing.detail.codePlaceholder": "e.g. cloud-connect-pricing",
|
|
596
|
+
"cpq.pricing.detail.configuration": "Configuration",
|
|
597
|
+
"cpq.pricing.detail.create": "Create Pricing Table",
|
|
598
|
+
"cpq.pricing.detail.currenciesCommaSeparated": "Currencies (comma-separated)",
|
|
599
|
+
"cpq.pricing.detail.currenciesPlaceholder": "USD, EUR",
|
|
600
|
+
"cpq.pricing.detail.dimensions.add": "+ Add Dimension",
|
|
601
|
+
"cpq.pricing.detail.dimensions.description": "Lookup keys for matching entries (e.g. region, tier). Leave empty if you use tier ranges only.",
|
|
602
|
+
"cpq.pricing.detail.dimensions.title": "Dimensions",
|
|
603
|
+
"cpq.pricing.detail.errors.createFailed": "Failed to create pricing table",
|
|
604
|
+
"cpq.pricing.detail.errors.deleteFailed": "Failed to delete",
|
|
605
|
+
"cpq.pricing.detail.errors.invalidId": "Invalid pricing table ID",
|
|
606
|
+
"cpq.pricing.detail.errors.loadFailed": "Failed to load",
|
|
607
|
+
"cpq.pricing.detail.errors.notFound": "Pricing table not found",
|
|
608
|
+
"cpq.pricing.detail.errors.saveFailed": "Failed to save pricing table",
|
|
609
|
+
"cpq.pricing.detail.errors.saveFailedGeneric": "Failed to save",
|
|
610
|
+
"cpq.pricing.detail.keyLabelList.actions": "Actions",
|
|
611
|
+
"cpq.pricing.detail.keyLabelList.key": "Key",
|
|
612
|
+
"cpq.pricing.detail.keyLabelList.keyPlaceholder": "e.g. region",
|
|
613
|
+
"cpq.pricing.detail.keyLabelList.label": "Label",
|
|
614
|
+
"cpq.pricing.detail.keyLabelList.labelPlaceholder": "Region",
|
|
615
|
+
"cpq.pricing.detail.keyLabelList.remove": "Remove",
|
|
616
|
+
"cpq.pricing.detail.namePlaceholder": "Cloud Connect Pricing",
|
|
617
|
+
"cpq.pricing.detail.priceColumns.add": "+ Add Price Column",
|
|
618
|
+
"cpq.pricing.detail.priceColumns.description": "Each price column becomes a numeric field on every entry. Charges reference one column by its key.",
|
|
619
|
+
"cpq.pricing.empty": "No pricing tables found.",
|
|
620
|
+
"cpq.pricing.entityName": "pricing table",
|
|
621
|
+
"cpq.pricing.entries.actions": "Actions",
|
|
622
|
+
"cpq.pricing.entries.addRow": "+ Add Row",
|
|
623
|
+
"cpq.pricing.entries.addTier": "+ Add Tier",
|
|
624
|
+
"cpq.pricing.entries.currency": "Currency",
|
|
625
|
+
"cpq.pricing.entries.deleteRow": "Delete row",
|
|
626
|
+
"cpq.pricing.entries.edit": "Edit Entries",
|
|
627
|
+
"cpq.pricing.entries.empty": "No entries in this pricing table.",
|
|
628
|
+
"cpq.pricing.entries.emptyEditing": "No entries yet — use \"+ Add Row\" (dimensions lookup) or \"+ Add Tier\" (range lookup).",
|
|
629
|
+
"cpq.pricing.entries.errors.createFailed": "Failed to create entries",
|
|
630
|
+
"cpq.pricing.entries.errors.deleteFailed": "Failed to delete entry {id}",
|
|
631
|
+
"cpq.pricing.entries.errors.saveFailed": "Failed to save entries",
|
|
632
|
+
"cpq.pricing.entries.errors.updateFailed": "Failed to update entry {id}",
|
|
633
|
+
"cpq.pricing.entries.rangeFrom": "Range From",
|
|
634
|
+
"cpq.pricing.entries.rangeTo": "Range To",
|
|
635
|
+
"cpq.pricing.entries.tierNumber": "Tier #",
|
|
636
|
+
"cpq.pricing.entries.title": "Entries ({count})",
|
|
637
|
+
"cpq.pricing.export.button": "Export to Excel",
|
|
638
|
+
"cpq.pricing.export.tooltip": "Download this pricing table as an Excel file",
|
|
639
|
+
"cpq.pricing.filters.isActive": "Active",
|
|
640
|
+
"cpq.pricing.import.button": "Import from Excel",
|
|
641
|
+
"cpq.pricing.import.errors.insertFailed": "Failed to insert entries",
|
|
642
|
+
"cpq.pricing.import.errors.missingCurrencyColumn": "Missing \"currency_code\" column",
|
|
643
|
+
"cpq.pricing.import.errors.missingDimensionColumns": "Missing dimension column(s): {columns}",
|
|
644
|
+
"cpq.pricing.import.errors.missingPriceColumns": "Missing price column(s): {columns}",
|
|
645
|
+
"cpq.pricing.import.errors.noDataRows": "Sheet has no data rows",
|
|
646
|
+
"cpq.pricing.import.errors.noSheets": "Workbook has no sheets",
|
|
647
|
+
"cpq.pricing.import.errors.readFailed": "Failed to read file",
|
|
648
|
+
"cpq.pricing.import.errors.readFailedWithReason": "Failed to read file: {reason}",
|
|
649
|
+
"cpq.pricing.import.errors.rowCurrencyNotAllowed": "Row {row}: currency \"{currency}\" is not in the table's currency list ({currencies})",
|
|
650
|
+
"cpq.pricing.import.errors.rowMissingCurrency": "Row {row}: missing currency_code",
|
|
651
|
+
"cpq.pricing.import.errors.rowPriceNotNumber": "Row {row}: price column \"{column}\" must be a number, got \"{value}\"",
|
|
652
|
+
"cpq.pricing.import.errors.rowTierNotNumber": "Row {row}: tier_number must be a number, got \"{value}\"",
|
|
653
|
+
"cpq.pricing.import.preview.apply": "Apply changes ({count})",
|
|
654
|
+
"cpq.pricing.import.preview.applying": "Applying...",
|
|
655
|
+
"cpq.pricing.import.preview.deletedCount": "{count} deleted",
|
|
656
|
+
"cpq.pricing.import.preview.deletesSummary": "{count} entries will be deleted",
|
|
657
|
+
"cpq.pricing.import.preview.insertRow": "Row {row}: {summary}",
|
|
658
|
+
"cpq.pricing.import.preview.insertsSummary": "{count} new entries will be created",
|
|
659
|
+
"cpq.pricing.import.preview.newCount": "{count} new",
|
|
660
|
+
"cpq.pricing.import.preview.noChanges": "The file contains no changes — every row matches an existing entry.",
|
|
661
|
+
"cpq.pricing.import.preview.tier": "tier {tier}",
|
|
662
|
+
"cpq.pricing.import.preview.title": "Import preview",
|
|
663
|
+
"cpq.pricing.import.preview.unchangedCount": "({count} unchanged)",
|
|
664
|
+
"cpq.pricing.import.preview.updateRowPrefix": "Row {row} (id ",
|
|
665
|
+
"cpq.pricing.import.preview.updateRowSuffix": "): {summary}",
|
|
666
|
+
"cpq.pricing.import.preview.updatedCount": "{count} updated",
|
|
667
|
+
"cpq.pricing.import.preview.updatesSummary": "{count} entries will be updated",
|
|
668
|
+
"cpq.pricing.import.preview.warnings": "Warnings",
|
|
669
|
+
"cpq.pricing.import.tooltip": "Upload an Excel file to add / update / delete entries",
|
|
670
|
+
"cpq.pricing.import.warnings.idNotFound": "Row {row}: id \"{id}\" not found in current entries — will be inserted as new",
|
|
671
|
+
"cpq.pricing.import.warnings.unknownColumn": "Ignored unknown column \"{column}\"",
|
|
672
|
+
"cpq.pricing.list.error.load": "Failed to load pricing tables",
|
|
673
|
+
"cpq.pricing.list.title": "Pricing Tables",
|
|
674
|
+
"cpq.pricing.name": "Name",
|
|
675
|
+
"cpq.pricing.new": "New Pricing Table",
|
|
676
|
+
"cpq.pricing.priceColumns": "Price Columns",
|
|
677
|
+
"cpq.pricing.search.placeholder": "Search pricing tables...",
|
|
678
|
+
"cpq.pricing.status": "Status",
|
|
679
|
+
"cpq.pricing.validation.codeRequired": "Code is required",
|
|
680
|
+
"cpq.pricing.validation.currencyRequired": "At least one currency is required",
|
|
681
|
+
"cpq.pricing.validation.dimensionDuplicateKey": "Dimension: duplicate key \"{key}\"",
|
|
682
|
+
"cpq.pricing.validation.dimensionKeyRequired": "Dimension #{index}: key is required",
|
|
683
|
+
"cpq.pricing.validation.dimensionLabelRequired": "Dimension #{index}: label is required",
|
|
684
|
+
"cpq.pricing.validation.nameRequired": "Name is required",
|
|
685
|
+
"cpq.pricing.validation.priceColumnDuplicateKey": "Price Column: duplicate key \"{key}\"",
|
|
686
|
+
"cpq.pricing.validation.priceColumnKeyRequired": "Price Column #{index}: key is required",
|
|
687
|
+
"cpq.pricing.validation.priceColumnLabelRequired": "Price Column #{index}: label is required",
|
|
688
|
+
"cpq.quotes.actions.open": "Open",
|
|
689
|
+
"cpq.quotes.add": "New Quote",
|
|
690
|
+
"cpq.quotes.arc.drawer.actions.amendHint": "Add or remove items on existing subscriptions. Term untouched.",
|
|
691
|
+
"cpq.quotes.arc.drawer.actions.cancelHint": "Terminate one or more subscriptions.",
|
|
692
|
+
"cpq.quotes.arc.drawer.actions.renewHint": "Extend term. With 2+ targets, merges them into a new contract.",
|
|
693
|
+
"cpq.quotes.arc.drawer.back": "← Back",
|
|
694
|
+
"cpq.quotes.arc.drawer.cancel.etfAmount": "ETF amount (optional)",
|
|
695
|
+
"cpq.quotes.arc.drawer.cancel.etfCurrency": "ETF currency",
|
|
696
|
+
"cpq.quotes.arc.drawer.cancel.freeText": "Free text (optional)",
|
|
697
|
+
"cpq.quotes.arc.drawer.cancel.pickOne": "— pick one —",
|
|
698
|
+
"cpq.quotes.arc.drawer.cancel.reasonCode": "Reason code",
|
|
699
|
+
"cpq.quotes.arc.drawer.cancel.title": "Reason for cancellation:",
|
|
700
|
+
"cpq.quotes.arc.drawer.close": "Close drawer",
|
|
701
|
+
"cpq.quotes.arc.drawer.closeButton": "Close",
|
|
702
|
+
"cpq.quotes.arc.drawer.currencyMismatch": "Currency mismatch ({subscriptionCurrency} vs {quoteCurrency}) — cannot include",
|
|
703
|
+
"cpq.quotes.arc.drawer.cyclesMismatch": "Picked targets have different billing cycles — merge requires matching cycles.",
|
|
704
|
+
"cpq.quotes.arc.drawer.done": "Done — close to return to the quote.",
|
|
705
|
+
"cpq.quotes.arc.drawer.errors.attachFailed": "POST /target-subscriptions failed",
|
|
706
|
+
"cpq.quotes.arc.drawer.errors.cancelMetaFailed": "POST /cancel-meta failed",
|
|
707
|
+
"cpq.quotes.arc.drawer.errors.mergeMetaFailed": "POST /merge-meta failed",
|
|
708
|
+
"cpq.quotes.arc.drawer.errors.patchFailed": "PATCH /quotes/{quoteId} failed",
|
|
709
|
+
"cpq.quotes.arc.drawer.fields.end": "End",
|
|
710
|
+
"cpq.quotes.arc.drawer.fields.months": "Months",
|
|
711
|
+
"cpq.quotes.arc.drawer.fields.newCode": "New contract code (optional — auto-generated if blank)",
|
|
712
|
+
"cpq.quotes.arc.drawer.fields.newName": "New contract name (optional)",
|
|
713
|
+
"cpq.quotes.arc.drawer.fields.start": "Start",
|
|
714
|
+
"cpq.quotes.arc.drawer.loadingSubscriptions": "Loading subscriptions…",
|
|
715
|
+
"cpq.quotes.arc.drawer.mergeWarning": "Merging {count} contracts into a new one — sources will be marked Merged at activation.",
|
|
716
|
+
"cpq.quotes.arc.drawer.next": "Next",
|
|
717
|
+
"cpq.quotes.arc.drawer.noSubscriptions": "No subscriptions for this customer.",
|
|
718
|
+
"cpq.quotes.arc.drawer.pickAction": "Pick the kind of change you want to make:",
|
|
719
|
+
"cpq.quotes.arc.drawer.reasons.configChange": "Configuration change",
|
|
720
|
+
"cpq.quotes.arc.drawer.reasons.consolidation": "Consolidation",
|
|
721
|
+
"cpq.quotes.arc.drawer.reasons.contractBreach": "Contract breach",
|
|
722
|
+
"cpq.quotes.arc.drawer.reasons.customerRequest": "Customer request",
|
|
723
|
+
"cpq.quotes.arc.drawer.reasons.downgrade": "Downgrade",
|
|
724
|
+
"cpq.quotes.arc.drawer.reasons.nonPayment": "Non-payment",
|
|
725
|
+
"cpq.quotes.arc.drawer.reasons.other": "Other",
|
|
726
|
+
"cpq.quotes.arc.drawer.reasons.priceAdjustment": "Price adjustment",
|
|
727
|
+
"cpq.quotes.arc.drawer.reasons.termExtension": "Term extension",
|
|
728
|
+
"cpq.quotes.arc.drawer.reasons.termReduction": "Term reduction",
|
|
729
|
+
"cpq.quotes.arc.drawer.reasons.upgrade": "Upgrade",
|
|
730
|
+
"cpq.quotes.arc.drawer.renew.mergeHintAfter": "to auto-fill both dates — start defaults to today, end is start + months.",
|
|
731
|
+
"cpq.quotes.arc.drawer.renew.mergeHintBefore": "Type a value into",
|
|
732
|
+
"cpq.quotes.arc.drawer.renew.mergeTitle": "New contract details (merge of {count} subscriptions):",
|
|
733
|
+
"cpq.quotes.arc.drawer.renew.singleHintAfter": "to auto-shift the end date, or edit start/end directly.",
|
|
734
|
+
"cpq.quotes.arc.drawer.renew.singleHintBefore": "Pre-filled with same length as the current term, starting at the current term end. Type a new value in",
|
|
735
|
+
"cpq.quotes.arc.drawer.renew.singleTitle": "New contract term for {name}:",
|
|
736
|
+
"cpq.quotes.arc.drawer.review.action": "Action: {type}",
|
|
737
|
+
"cpq.quotes.arc.drawer.review.etf": "ETF {amount} {currency}",
|
|
738
|
+
"cpq.quotes.arc.drawer.review.lockWarning": "Submitting locks the quote type. Lines will be edited on the host page after this completes.",
|
|
739
|
+
"cpq.quotes.arc.drawer.review.mergeCode": "code={code}",
|
|
740
|
+
"cpq.quotes.arc.drawer.review.mergeName": "name={name}",
|
|
741
|
+
"cpq.quotes.arc.drawer.review.mergeTerm": "Merge term: {start} → {end}",
|
|
742
|
+
"cpq.quotes.arc.drawer.review.reason": "Reason: {reason}",
|
|
743
|
+
"cpq.quotes.arc.drawer.review.targets": "Targets: {count}",
|
|
744
|
+
"cpq.quotes.arc.drawer.review.term": "Term: {start} → {end}",
|
|
745
|
+
"cpq.quotes.arc.drawer.review.termWithMonths": "Term: {start} → {end} ({months}m)",
|
|
746
|
+
"cpq.quotes.arc.drawer.review.title": "Review and submit:",
|
|
747
|
+
"cpq.quotes.arc.drawer.stepLabel": "Step:",
|
|
748
|
+
"cpq.quotes.arc.drawer.submit": "Submit",
|
|
749
|
+
"cpq.quotes.arc.drawer.submitting": "Submitting…",
|
|
750
|
+
"cpq.quotes.arc.drawer.targetCount": "{count} target(s)",
|
|
751
|
+
"cpq.quotes.arc.drawer.termEnds": "Term ends {date}",
|
|
752
|
+
"cpq.quotes.arc.drawer.title": "Modify subscription",
|
|
753
|
+
"cpq.quotes.arc.lineRemoved": "remove",
|
|
754
|
+
"cpq.quotes.arc.lineRemovedHint": "This item is cancelled on the subscription when the order is activated",
|
|
755
|
+
"cpq.quotes.arc.priceKept": "price kept",
|
|
756
|
+
"cpq.quotes.arc.priceKeptHint": "Price kept from the subscription — it changes only if you reconfigure this line",
|
|
757
|
+
"cpq.quotes.arc.removeConfirm.confirm": "Remove item",
|
|
758
|
+
"cpq.quotes.arc.removeConfirm.text": "This item already exists on the subscription. Removing it here does not delete it from the quote — it stays as a \"remove\" line, and when the order is activated the item (and its components) is cancelled on the subscription and its recurring charge stops. You can restore it until then.",
|
|
759
|
+
"cpq.quotes.arc.removeConfirm.title": "Remove {name} from the subscription?",
|
|
760
|
+
"cpq.quotes.arc.repricedDescription": "Reconfigured lines were re-priced at today's catalog price. Negotiated prices from the subscription are not carried over to reconfigured lines yet.",
|
|
761
|
+
"cpq.quotes.arc.repricedTitle": "Some existing items use the current catalog price",
|
|
762
|
+
"cpq.quotes.arc.restore": "Restore",
|
|
763
|
+
"cpq.quotes.arc.restoreHint": "Keep this item on the subscription",
|
|
764
|
+
"cpq.quotes.bundle.addComponent": "Add {name}",
|
|
765
|
+
"cpq.quotes.bundle.alreadyAdded": "Already added",
|
|
766
|
+
"cpq.quotes.bundle.loadingStructure": "Loading bundle structure…",
|
|
767
|
+
"cpq.quotes.bundle.slotFull": "Slot is full",
|
|
768
|
+
"cpq.quotes.bundle.slotMin": "(min {min})",
|
|
769
|
+
"cpq.quotes.bundle.slotOptional": "optional",
|
|
770
|
+
"cpq.quotes.bundle.slotRequired": "required",
|
|
771
|
+
"cpq.quotes.create.error": "Failed to create quote ({status})",
|
|
772
|
+
"cpq.quotes.customerPicker.empty": "No customers found.",
|
|
773
|
+
"cpq.quotes.customerPicker.loading": "Loading customers…",
|
|
774
|
+
"cpq.quotes.customerPicker.noMatch": "No customers match your search.",
|
|
775
|
+
"cpq.quotes.customerPicker.searchPlaceholder": "Search customers…",
|
|
776
|
+
"cpq.quotes.customerPicker.title": "Select Customer for New Quote",
|
|
777
|
+
"cpq.quotes.customerPicker.unnamed": "Unnamed",
|
|
778
|
+
"cpq.quotes.detail.actions": "Actions",
|
|
779
|
+
"cpq.quotes.detail.actsOnSubscription": "Acts on subscription {code}",
|
|
780
|
+
"cpq.quotes.detail.addComponent": "Add Component",
|
|
781
|
+
"cpq.quotes.detail.addOffering": "Add Offering",
|
|
782
|
+
"cpq.quotes.detail.addingComponentTo": "Adding component to bundle:",
|
|
783
|
+
"cpq.quotes.detail.arcTargets.one": "{count} target:",
|
|
784
|
+
"cpq.quotes.detail.arcTargets.other": "{count} targets:",
|
|
785
|
+
"cpq.quotes.detail.backLabel": "Back to CPQ Quotes",
|
|
786
|
+
"cpq.quotes.detail.backToQuotes": "← Back to Quotes",
|
|
787
|
+
"cpq.quotes.detail.bundleFallback": "Bundle",
|
|
788
|
+
"cpq.quotes.detail.configure.addComponentTitle": "Add Component: {name}",
|
|
789
|
+
"cpq.quotes.detail.configure.addToQuote": "Add to Quote",
|
|
790
|
+
"cpq.quotes.detail.configure.applyToSubscriptions": "Apply to subscription(s)",
|
|
791
|
+
"cpq.quotes.detail.configure.applyToSubscriptionsHint": "Pick one or more — a separate line will be created on each selected subscription.",
|
|
792
|
+
"cpq.quotes.detail.configure.configureTitle": "Configure: {name}",
|
|
793
|
+
"cpq.quotes.detail.configure.editTitle": "Edit: {name}",
|
|
794
|
+
"cpq.quotes.detail.configure.enable": "Enable",
|
|
795
|
+
"cpq.quotes.detail.configure.lineFallback": "Line",
|
|
796
|
+
"cpq.quotes.detail.configure.noAttributes": "No configurable attributes for this offering.",
|
|
797
|
+
"cpq.quotes.detail.configure.quantity": "Quantity",
|
|
798
|
+
"cpq.quotes.detail.configure.selectPlaceholder": "— Select —",
|
|
799
|
+
"cpq.quotes.detail.configure.selectTarget": "Select at least one target.",
|
|
800
|
+
"cpq.quotes.detail.configure.updateLine": "Update Line",
|
|
801
|
+
"cpq.quotes.detail.convertToOrder": "Convert to Order",
|
|
802
|
+
"cpq.quotes.detail.converted": "Converted",
|
|
803
|
+
"cpq.quotes.detail.customerIdRequired": "customerId is required to create a CPQ quote",
|
|
804
|
+
"cpq.quotes.detail.deleteConfirm.text": "Are you sure you want to delete this quote? This will soft-delete the quote and all its line items.",
|
|
805
|
+
"cpq.quotes.detail.deleteConfirm.title": "Delete Quote",
|
|
806
|
+
"cpq.quotes.detail.entityType": "CPQ Quote",
|
|
807
|
+
"cpq.quotes.detail.goToOrder": "Go to order",
|
|
808
|
+
"cpq.quotes.detail.lineConfigured": "configured",
|
|
809
|
+
"cpq.quotes.detail.lineIncomplete": "incomplete",
|
|
810
|
+
"cpq.quotes.detail.lineItems": "Line Items",
|
|
811
|
+
"cpq.quotes.detail.loading": "Loading…",
|
|
812
|
+
"cpq.quotes.detail.mergingRenew": "• Merging into a new contract",
|
|
813
|
+
"cpq.quotes.detail.meta.currency": "Currency",
|
|
814
|
+
"cpq.quotes.detail.meta.customer": "Customer",
|
|
815
|
+
"cpq.quotes.detail.meta.version": "Version",
|
|
816
|
+
"cpq.quotes.detail.modifySubscription": "Modify Subscription",
|
|
817
|
+
"cpq.quotes.detail.noBreakdown": "No detailed charge breakdown available for this line.",
|
|
818
|
+
"cpq.quotes.detail.noLines": "No items configured yet. Click \"Add Offering\" to start.",
|
|
819
|
+
"cpq.quotes.detail.notFound": "Quote not found.",
|
|
820
|
+
"cpq.quotes.detail.recalculate": "Recalculate",
|
|
821
|
+
"cpq.quotes.detail.removeLine": "Remove",
|
|
822
|
+
"cpq.quotes.detail.statusPath": "Quote status path",
|
|
823
|
+
"cpq.quotes.detail.untitled": "Untitled",
|
|
824
|
+
"cpq.quotes.detail.validationIssues": "Validation Issues",
|
|
825
|
+
"cpq.quotes.detail.viewSalesQuote": "View Sales Quote",
|
|
826
|
+
"cpq.quotes.empty": "No CPQ quotes found. Create one to start configuring offerings for a customer.",
|
|
827
|
+
"cpq.quotes.filters.currency": "Currency",
|
|
828
|
+
"cpq.quotes.filters.status": "Status",
|
|
829
|
+
"cpq.quotes.lineUpdateFailed": "Could not update the line",
|
|
830
|
+
"cpq.quotes.list.error.load": "Failed to load quotes",
|
|
831
|
+
"cpq.quotes.list.title": "CPQ Quotes",
|
|
832
|
+
"cpq.quotes.offeringBrowser.empty": "No active offerings available.",
|
|
833
|
+
"cpq.quotes.offeringBrowser.loading": "Loading offerings…",
|
|
834
|
+
"cpq.quotes.offeringBrowser.noMatch": "No offerings match your search.",
|
|
835
|
+
"cpq.quotes.offeringBrowser.searchPlaceholder": "Search offerings…",
|
|
836
|
+
"cpq.quotes.offeringBrowser.title": "Select Product Offering",
|
|
837
|
+
"cpq.quotes.search.placeholder": "Search by quote / customer id...",
|
|
838
|
+
"cpq.quotes.status.accepted": "Accepted",
|
|
839
|
+
"cpq.quotes.status.approved": "Approved",
|
|
840
|
+
"cpq.quotes.status.cancelled": "Cancelled",
|
|
841
|
+
"cpq.quotes.status.in_approval": "In Approval",
|
|
842
|
+
"cpq.quotes.status.incomplete": "Incomplete",
|
|
843
|
+
"cpq.quotes.status.new": "New",
|
|
844
|
+
"cpq.quotes.status.ready": "Ready",
|
|
845
|
+
"cpq.quotes.status.rejected": "Rejected",
|
|
846
|
+
"cpq.quotes.status.with_customer": "With Customer",
|
|
847
|
+
"cpq.quotes.summary.arc.currentMrc": "Current MRC",
|
|
848
|
+
"cpq.quotes.summary.arc.mrcChange": "MRC change",
|
|
849
|
+
"cpq.quotes.summary.arc.newMrc": "New MRC",
|
|
850
|
+
"cpq.quotes.summary.mrc": "Monthly Recurring (MRC)",
|
|
851
|
+
"cpq.quotes.summary.nrc": "Non-Recurring (NRC)",
|
|
852
|
+
"cpq.quotes.summary.title": "Pricing Summary",
|
|
853
|
+
"cpq.quotes.summary.usageChargeLine": "{name}: {price}/unit",
|
|
854
|
+
"cpq.quotes.summary.usageCharges": "Usage Charges",
|
|
855
|
+
"cpq.quotes.summary.usageEstimated": "Usage (est.)",
|
|
856
|
+
"cpq.quotes.table.createdAt": "Created",
|
|
857
|
+
"cpq.quotes.table.currency": "Currency",
|
|
858
|
+
"cpq.quotes.table.mrcTotal": "MRC Total",
|
|
859
|
+
"cpq.quotes.table.nrcTotal": "NRC Total",
|
|
860
|
+
"cpq.quotes.table.quoteNumber": "Quote Number",
|
|
861
|
+
"cpq.quotes.table.status": "Status",
|
|
862
|
+
"cpq.quotes.table.version": "Version",
|
|
863
|
+
"cpq.quotes.title": "CPQ Quotes",
|
|
864
|
+
"cpq.quotes.type.amend": "amend",
|
|
865
|
+
"cpq.quotes.type.cancel": "cancel",
|
|
866
|
+
"cpq.quotes.type.renew": "renew",
|
|
867
|
+
"cpq.rowActions.delete": "Delete",
|
|
868
|
+
"cpq.rowActions.deleteBulk.confirm": "Delete selected items ({count})?",
|
|
869
|
+
"cpq.rowActions.deleteBulk.noEligible": "None of the selected items can be deleted in their current state.",
|
|
870
|
+
"cpq.rowActions.deleteBulk.partialError": "Failed to delete {count} of the selected items",
|
|
871
|
+
"cpq.rowActions.deleteBulk.success": "Selected items deleted ({count})",
|
|
872
|
+
"cpq.rowActions.deleteOne.confirm": "Delete this item?",
|
|
873
|
+
"cpq.rowActions.deleteOne.error": "Failed to delete the item",
|
|
874
|
+
"cpq.rowActions.deleteOne.success": "Item deleted",
|
|
875
|
+
"cpq.rowActions.edit": "Edit",
|
|
876
|
+
"cpq.specifications.add": "New Specification",
|
|
877
|
+
"cpq.specifications.addAttribute": "Add Attribute",
|
|
878
|
+
"cpq.specifications.addOffering": "Add Offering",
|
|
879
|
+
"cpq.specifications.addRelationship": "Add Relationship",
|
|
880
|
+
"cpq.specifications.attributeType.boolean": "Boolean",
|
|
881
|
+
"cpq.specifications.attributeType.multiSelect": "Multi-Select",
|
|
882
|
+
"cpq.specifications.attributeType.number": "Number",
|
|
883
|
+
"cpq.specifications.attributeType.reference": "Reference",
|
|
884
|
+
"cpq.specifications.attributeType.select": "Select",
|
|
885
|
+
"cpq.specifications.attributeType.text": "Text",
|
|
886
|
+
"cpq.specifications.attributes.addOption": "+ Add option",
|
|
887
|
+
"cpq.specifications.attributes.columns.actions": "Actions",
|
|
888
|
+
"cpq.specifications.attributes.columns.code": "Code",
|
|
889
|
+
"cpq.specifications.attributes.columns.name": "Name",
|
|
890
|
+
"cpq.specifications.attributes.columns.options": "Options",
|
|
891
|
+
"cpq.specifications.attributes.columns.required": "Required",
|
|
892
|
+
"cpq.specifications.attributes.columns.resolution": "Resolution",
|
|
893
|
+
"cpq.specifications.attributes.columns.type": "Type",
|
|
894
|
+
"cpq.specifications.attributes.confirmDelete": "Delete this attribute?",
|
|
895
|
+
"cpq.specifications.attributes.dependsOn.effect": "Effect",
|
|
896
|
+
"cpq.specifications.attributes.dependsOn.effects.filterOptions": "Filter options",
|
|
897
|
+
"cpq.specifications.attributes.dependsOn.effects.setValue": "Set value",
|
|
898
|
+
"cpq.specifications.attributes.dependsOn.effects.toggleRequired": "Toggle required",
|
|
899
|
+
"cpq.specifications.attributes.dependsOn.enable": "Depends on another attribute",
|
|
900
|
+
"cpq.specifications.attributes.dependsOn.parentAttribute": "Parent Attribute Code",
|
|
901
|
+
"cpq.specifications.attributes.dependsOn.rules": "Rules",
|
|
902
|
+
"cpq.specifications.attributes.dependsOn.selectAttribute": "Select attribute...",
|
|
903
|
+
"cpq.specifications.attributes.empty": "No attributes defined. Add design-time and run-time attributes for this specification.",
|
|
904
|
+
"cpq.specifications.attributes.error.delete": "Failed to delete attribute",
|
|
905
|
+
"cpq.specifications.attributes.error.save": "Failed to save attribute",
|
|
906
|
+
"cpq.specifications.attributes.fields.code": "Code",
|
|
907
|
+
"cpq.specifications.attributes.fields.helpText": "Help Text",
|
|
908
|
+
"cpq.specifications.attributes.fields.isRequired": "Required",
|
|
909
|
+
"cpq.specifications.attributes.fields.name": "Name",
|
|
910
|
+
"cpq.specifications.attributes.fields.options": "Options",
|
|
911
|
+
"cpq.specifications.attributes.fields.referenceEntity": "Reference Entity",
|
|
912
|
+
"cpq.specifications.attributes.fields.referenceEntityPlaceholder": "e.g. CatalogProduct",
|
|
913
|
+
"cpq.specifications.attributes.fields.resolutionTime": "Resolution Time",
|
|
914
|
+
"cpq.specifications.attributes.fields.sortOrder": "Sort Order",
|
|
915
|
+
"cpq.specifications.attributes.fields.type": "Type",
|
|
916
|
+
"cpq.specifications.attributes.form.editTitle": "Edit Attribute",
|
|
917
|
+
"cpq.specifications.attributes.form.newTitle": "New Attribute",
|
|
918
|
+
"cpq.specifications.attributes.noOptions": "No options defined. Click \"Add option\" to start.",
|
|
919
|
+
"cpq.specifications.attributes.optionLabelPlaceholder": "Label (e.g. Amazon Web Services)",
|
|
920
|
+
"cpq.specifications.attributes.optionValuePlaceholder": "Value (e.g. aws)",
|
|
921
|
+
"cpq.specifications.attributes.optionsCount": "{count} options",
|
|
922
|
+
"cpq.specifications.attributes.removeOption": "Remove",
|
|
923
|
+
"cpq.specifications.attributes.resolutionShort.design": "design",
|
|
924
|
+
"cpq.specifications.attributes.resolutionShort.run": "run",
|
|
925
|
+
"cpq.specifications.booleanFalse": "False",
|
|
926
|
+
"cpq.specifications.booleanTrue": "True",
|
|
927
|
+
"cpq.specifications.charges.confirmDelete": "Delete this charge?",
|
|
928
|
+
"cpq.specifications.charges.error.delete": "Failed to delete charge",
|
|
929
|
+
"cpq.specifications.charges.error.saveAll": "Failed to save charges",
|
|
930
|
+
"cpq.specifications.charges.error.saveFor": "Failed to save charge for {name}",
|
|
931
|
+
"cpq.specifications.code": "Code",
|
|
932
|
+
"cpq.specifications.confirmDelete": "Delete this specification and all its offerings, attributes and relationships?",
|
|
933
|
+
"cpq.specifications.defaultValue": "Default Value",
|
|
934
|
+
"cpq.specifications.dependsOn.addRule": "Add rule",
|
|
935
|
+
"cpq.specifications.dependsOn.csvPlaceholder": "value1, value2, value3",
|
|
936
|
+
"cpq.specifications.dependsOn.empty": "No rules yet. Add at least one to make this dependency effective.",
|
|
937
|
+
"cpq.specifications.dependsOn.optional": "Optional",
|
|
938
|
+
"cpq.specifications.dependsOn.parentValuePlaceholder": "Parent value",
|
|
939
|
+
"cpq.specifications.dependsOn.removeRule": "Remove rule",
|
|
940
|
+
"cpq.specifications.dependsOn.required": "Required",
|
|
941
|
+
"cpq.specifications.dependsOn.selectValue": "— Select value —",
|
|
942
|
+
"cpq.specifications.dependsOn.thenAllowOnly": "Then allow only",
|
|
943
|
+
"cpq.specifications.dependsOn.thenAllowOnlyCsv": "Then allow only (comma-separated)",
|
|
944
|
+
"cpq.specifications.dependsOn.thenRequiredIs": "Then required is",
|
|
945
|
+
"cpq.specifications.dependsOn.thenSetValueTo": "Then set value to",
|
|
946
|
+
"cpq.specifications.dependsOn.valuePlaceholder": "Value",
|
|
947
|
+
"cpq.specifications.dependsOn.whenParent": "When parent =",
|
|
948
|
+
"cpq.specifications.description": "Description",
|
|
949
|
+
"cpq.specifications.detail.codePlaceholder": "e.g. gix-access-port",
|
|
950
|
+
"cpq.specifications.detail.error.delete": "Failed to delete",
|
|
951
|
+
"cpq.specifications.detail.error.load": "Failed to load specification",
|
|
952
|
+
"cpq.specifications.detail.error.loadGeneric": "Failed to load",
|
|
953
|
+
"cpq.specifications.detail.error.save": "Failed to save",
|
|
954
|
+
"cpq.specifications.detail.isAssetizable": "Is Assetizable?",
|
|
955
|
+
"cpq.specifications.detail.isAssetizableHelp": "Creates asset records during fulfilment",
|
|
956
|
+
"cpq.specifications.detail.specType": "Spec Type",
|
|
957
|
+
"cpq.specifications.detail.specTypeLocked": "Cannot change after offerings or slots exist",
|
|
958
|
+
"cpq.specifications.detail.tabs.attributes": "Attributes ({count})",
|
|
959
|
+
"cpq.specifications.detail.tabs.general": "General",
|
|
960
|
+
"cpq.specifications.detail.tabs.offerings": "Offerings ({count})",
|
|
961
|
+
"cpq.specifications.detail.tabs.relationships": "Relationships ({count})",
|
|
962
|
+
"cpq.specifications.detail.tabs.slots": "Bundle Slots ({count})",
|
|
963
|
+
"cpq.specifications.detail.versionLabel": "Version {version}",
|
|
964
|
+
"cpq.specifications.empty": "No product specifications found. Create one to define your product catalogue.",
|
|
965
|
+
"cpq.specifications.entityName": "specification",
|
|
966
|
+
"cpq.specifications.filters.isActive": "Active",
|
|
967
|
+
"cpq.specifications.filters.isAssetizable": "Assetizable",
|
|
968
|
+
"cpq.specifications.filters.lifecycleStatus": "Lifecycle Status",
|
|
969
|
+
"cpq.specifications.filters.specType": "Type",
|
|
970
|
+
"cpq.specifications.isActive": "Is Active?",
|
|
971
|
+
"cpq.specifications.lifecycle.active": "Active",
|
|
972
|
+
"cpq.specifications.lifecycle.deprecated": "Deprecated",
|
|
973
|
+
"cpq.specifications.lifecycle.draft": "Draft",
|
|
974
|
+
"cpq.specifications.lifecycleStatus": "Lifecycle Status",
|
|
975
|
+
"cpq.specifications.list.error.load": "Failed to load specifications",
|
|
976
|
+
"cpq.specifications.list.tag.asset": "asset",
|
|
977
|
+
"cpq.specifications.list.tag.bundle": "bundle",
|
|
978
|
+
"cpq.specifications.list.title": "Product Specifications",
|
|
979
|
+
"cpq.specifications.multiSelectDefaultHint": "Ctrl/Cmd-click to select several, or deselect all to clear the default.",
|
|
980
|
+
"cpq.specifications.name": "Name",
|
|
981
|
+
"cpq.specifications.new": "New Specification",
|
|
982
|
+
"cpq.specifications.noDefault": "No default",
|
|
983
|
+
"cpq.specifications.offerings.columns.actions": "Actions",
|
|
984
|
+
"cpq.specifications.offerings.columns.code": "Code",
|
|
985
|
+
"cpq.specifications.offerings.columns.designTimeValues": "Design-Time Values",
|
|
986
|
+
"cpq.specifications.offerings.columns.name": "Name",
|
|
987
|
+
"cpq.specifications.offerings.columns.status": "Status",
|
|
988
|
+
"cpq.specifications.offerings.confirmDelete": "Delete this offering?",
|
|
989
|
+
"cpq.specifications.offerings.empty": "No offerings created. An offering is a sellable instance of this specification with fixed design-time values and attached charges.",
|
|
990
|
+
"cpq.specifications.offerings.error.delete": "Failed to delete offering",
|
|
991
|
+
"cpq.specifications.offerings.error.save": "Failed to save offering",
|
|
992
|
+
"cpq.specifications.offerings.fields.code": "Code",
|
|
993
|
+
"cpq.specifications.offerings.fields.codePlaceholder": "e.g. gix-cloud-connect-aws",
|
|
994
|
+
"cpq.specifications.offerings.fields.description": "Description",
|
|
995
|
+
"cpq.specifications.offerings.fields.designTimeValues": "Design-Time Values",
|
|
996
|
+
"cpq.specifications.offerings.fields.isActive": "Is Active?",
|
|
997
|
+
"cpq.specifications.offerings.fields.lifecycleStatus": "Lifecycle Status",
|
|
998
|
+
"cpq.specifications.offerings.fields.name": "Name",
|
|
999
|
+
"cpq.specifications.offerings.fields.selectAttribute": "Select {name}...",
|
|
1000
|
+
"cpq.specifications.offerings.form.editTitle": "Edit Offering",
|
|
1001
|
+
"cpq.specifications.offerings.form.newTitle": "New Offering",
|
|
1002
|
+
"cpq.specifications.offerings.noDesignTimeAttributes": "No design-time attributes defined on this specification. All attributes are run-time.",
|
|
1003
|
+
"cpq.specifications.relationships.columns.actions": "Actions",
|
|
1004
|
+
"cpq.specifications.relationships.columns.cardinality": "Cardinality",
|
|
1005
|
+
"cpq.specifications.relationships.columns.condition": "Condition",
|
|
1006
|
+
"cpq.specifications.relationships.columns.source": "Source",
|
|
1007
|
+
"cpq.specifications.relationships.columns.target": "Target",
|
|
1008
|
+
"cpq.specifications.relationships.columns.type": "Type",
|
|
1009
|
+
"cpq.specifications.relationships.confirmDelete": "Delete this relationship?",
|
|
1010
|
+
"cpq.specifications.relationships.empty": "No relationships defined. Declare parent/child, requires, or excludes relationships with other specifications.",
|
|
1011
|
+
"cpq.specifications.relationships.error.delete": "Failed to delete relationship",
|
|
1012
|
+
"cpq.specifications.relationships.error.save": "Failed to save relationship",
|
|
1013
|
+
"cpq.specifications.relationships.fields.condition": "Condition (JSON)",
|
|
1014
|
+
"cpq.specifications.relationships.fields.conditionPlaceholder": "null or {\"attribute\":\"direction\",\"operator\":\"in\",\"value\":[\"inbound\"]}",
|
|
1015
|
+
"cpq.specifications.relationships.fields.max": "Max",
|
|
1016
|
+
"cpq.specifications.relationships.fields.min": "Min",
|
|
1017
|
+
"cpq.specifications.relationships.fields.selectTarget": "Select...",
|
|
1018
|
+
"cpq.specifications.relationships.fields.targetSpecification": "Target Specification",
|
|
1019
|
+
"cpq.specifications.relationships.fields.type": "Type",
|
|
1020
|
+
"cpq.specifications.relationships.form.editTitle": "Edit Relationship",
|
|
1021
|
+
"cpq.specifications.relationships.form.newTitle": "New Relationship",
|
|
1022
|
+
"cpq.specifications.relationships.type.excludes": "Excludes",
|
|
1023
|
+
"cpq.specifications.relationships.type.parentChild": "Parent / Child",
|
|
1024
|
+
"cpq.specifications.relationships.type.requires": "Requires",
|
|
1025
|
+
"cpq.specifications.resolutionTime.designTime": "Design-time (offering)",
|
|
1026
|
+
"cpq.specifications.resolutionTime.runTime": "Run-time (quoting)",
|
|
1027
|
+
"cpq.specifications.search.placeholder": "Search specifications...",
|
|
1028
|
+
"cpq.specifications.slots.add": "+ Add Slot",
|
|
1029
|
+
"cpq.specifications.slots.columns.actions": "Actions",
|
|
1030
|
+
"cpq.specifications.slots.columns.cardinality": "Cardinality",
|
|
1031
|
+
"cpq.specifications.slots.columns.group": "Group",
|
|
1032
|
+
"cpq.specifications.slots.columns.name": "Name",
|
|
1033
|
+
"cpq.specifications.slots.columns.order": "Order",
|
|
1034
|
+
"cpq.specifications.slots.columns.targetSpec": "Target Spec",
|
|
1035
|
+
"cpq.specifications.slots.confirmDelete": "Delete this bundle slot?",
|
|
1036
|
+
"cpq.specifications.slots.empty": "No bundle slots defined yet. Add slots to define what component specifications can fill this bundle.",
|
|
1037
|
+
"cpq.specifications.slots.error.delete": "Failed to delete slot",
|
|
1038
|
+
"cpq.specifications.slots.error.save": "Failed to save slot",
|
|
1039
|
+
"cpq.specifications.slots.fields.cardinalityMax": "Cardinality Max",
|
|
1040
|
+
"cpq.specifications.slots.fields.cardinalityMaxPlaceholder": "∞ (unlimited)",
|
|
1041
|
+
"cpq.specifications.slots.fields.cardinalityMin": "Cardinality Min",
|
|
1042
|
+
"cpq.specifications.slots.fields.componentGroup": "Component Group",
|
|
1043
|
+
"cpq.specifications.slots.fields.componentGroupPlaceholder": "e.g. internet, tv, phone",
|
|
1044
|
+
"cpq.specifications.slots.fields.description": "Description",
|
|
1045
|
+
"cpq.specifications.slots.fields.name": "Name",
|
|
1046
|
+
"cpq.specifications.slots.fields.namePlaceholder": "e.g. Internet Component",
|
|
1047
|
+
"cpq.specifications.slots.fields.selectSpecification": "— Select specification —",
|
|
1048
|
+
"cpq.specifications.slots.fields.sortOrder": "Sort Order",
|
|
1049
|
+
"cpq.specifications.slots.fields.targetSpecification": "Target Specification",
|
|
1050
|
+
"cpq.specifications.slots.form.create": "Create",
|
|
1051
|
+
"cpq.specifications.slots.form.editTitle": "Edit Bundle Slot",
|
|
1052
|
+
"cpq.specifications.slots.form.newTitle": "New Bundle Slot",
|
|
1053
|
+
"cpq.specifications.slots.form.update": "Update",
|
|
1054
|
+
"cpq.specifications.slots.tag.bundle": "bundle",
|
|
1055
|
+
"cpq.specifications.slots.unknown": "Unknown",
|
|
1056
|
+
"cpq.specifications.type.bundle": "Bundle",
|
|
1057
|
+
"cpq.specifications.type.simple": "Simple",
|
|
1058
|
+
"cpq.specifications.version": "Version",
|
|
1059
|
+
"cpq.statusPath.ariaLabel": "Status path",
|
|
1060
|
+
"cpq.statusPath.transitionTo": "Transition to {status}",
|
|
1061
|
+
"cpq.widgets.customerInventory.empty": "No inventory records found.",
|
|
1062
|
+
"cpq.widgets.customerInventory.emptyTab": "No records in this category.",
|
|
1063
|
+
"cpq.widgets.customerInventory.loading": "Loading inventory…",
|
|
1064
|
+
"cpq.widgets.customerInventory.noContext": "No customer context available.",
|
|
1065
|
+
"cpq.widgets.customerInventory.summary.activeAssets": "Active Assets",
|
|
1066
|
+
"cpq.widgets.customerInventory.summary.activeSubscriptions": "Active Subscriptions",
|
|
1067
|
+
"cpq.widgets.customerInventory.summary.pendingItems": "Pending Items",
|
|
1068
|
+
"cpq.widgets.customerInventory.summary.totalMrc": "Total MRC",
|
|
1069
|
+
"cpq.widgets.customerInventory.table.billing": "Billing",
|
|
1070
|
+
"cpq.widgets.customerInventory.table.linkedSubscription": "Sub {id}…",
|
|
1071
|
+
"cpq.widgets.customerInventory.table.linkedTo": "Linked To",
|
|
1072
|
+
"cpq.widgets.customerInventory.table.mrc": "MRC",
|
|
1073
|
+
"cpq.widgets.customerInventory.table.name": "Name",
|
|
1074
|
+
"cpq.widgets.customerInventory.table.nrc": "NRC",
|
|
1075
|
+
"cpq.widgets.customerInventory.table.price": "Price",
|
|
1076
|
+
"cpq.widgets.customerInventory.table.qty": "Qty",
|
|
1077
|
+
"cpq.widgets.customerInventory.table.startDate": "Start Date",
|
|
1078
|
+
"cpq.widgets.customerInventory.table.status": "Status",
|
|
1079
|
+
"cpq.widgets.customerInventory.table.termEnd": "Term End",
|
|
1080
|
+
"cpq.widgets.customerInventory.table.type": "Type",
|
|
1081
|
+
"cpq.widgets.customerInventory.tabs.assets": "Assets",
|
|
1082
|
+
"cpq.widgets.customerInventory.tabs.items": "Subscription Items",
|
|
1083
|
+
"cpq.widgets.customerInventory.tabs.subscriptions": "Subscriptions",
|
|
1084
|
+
"cpq.widgets.customerInventory.viewFull": "View full inventory →",
|
|
1085
|
+
"cpq.widgets.orderCpqTab.empty": "No CPQ orders linked to this sales order.",
|
|
1086
|
+
"cpq.widgets.orderCpqTab.loading": "Loading CPQ orders…",
|
|
1087
|
+
"cpq.widgets.orderCpqTab.open": "Open →",
|
|
1088
|
+
"cpq.widgets.orderCpqTab.tab": "CPQ Order",
|
|
1089
|
+
"cpq.widgets.quoteConfigurator.assignCustomer": "Assign a customer to this quote first.",
|
|
1090
|
+
"cpq.widgets.quoteConfigurator.charges.charge": "Charge",
|
|
1091
|
+
"cpq.widgets.quoteConfigurator.charges.qty": "Qty",
|
|
1092
|
+
"cpq.widgets.quoteConfigurator.charges.total": "Total",
|
|
1093
|
+
"cpq.widgets.quoteConfigurator.charges.type": "Type",
|
|
1094
|
+
"cpq.widgets.quoteConfigurator.charges.unitPrice": "Unit Price",
|
|
1095
|
+
"cpq.widgets.quoteConfigurator.create": "Create CPQ Quote",
|
|
1096
|
+
"cpq.widgets.quoteConfigurator.loading": "Loading CPQ configuration…",
|
|
1097
|
+
"cpq.widgets.quoteConfigurator.noConfig": "This quote has no CPQ configuration yet.",
|
|
1098
|
+
"cpq.widgets.quoteConfigurator.noContext": "No quote context available.",
|
|
1099
|
+
"cpq.widgets.quoteConfigurator.noLines": "No items configured yet.",
|
|
1100
|
+
"cpq.widgets.quoteConfigurator.open": "Open CPQ Configurator",
|
|
1101
|
+
"cpq.widgets.quoteConfigurator.tab": "CPQ Configuration",
|
|
1102
|
+
"cpq.wizard.linePricing": "{nrc} NRC / {mrc} MRC",
|
|
1103
|
+
"cpq.wizard.loadingAttributes": "Loading attributes...",
|
|
1104
|
+
"cpq.wizard.next": "Next",
|
|
1105
|
+
"cpq.wizard.remove": "Remove",
|
|
1106
|
+
"cpq.wizard.runner.currentStep": "Step: {title}",
|
|
1107
|
+
"cpq.wizard.runner.notRegistered": "This step type is not registered. Register it via",
|
|
1108
|
+
"cpq.wizard.runner.unknownStepType": "Unknown step type:",
|
|
1109
|
+
"cpq.wizard.selectPlaceholder": "Select...",
|
|
1110
|
+
"cpq.wizard.skip": "Skip",
|
|
1111
|
+
"cpq.wizard.steps.customerSelect.clear": "Clear",
|
|
1112
|
+
"cpq.wizard.steps.customerSelect.description": "Search and select a customer for the quote.",
|
|
1113
|
+
"cpq.wizard.steps.customerSelect.empty": "No customers found.",
|
|
1114
|
+
"cpq.wizard.steps.customerSelect.label": "Customer Selection",
|
|
1115
|
+
"cpq.wizard.steps.customerSelect.search": "Search",
|
|
1116
|
+
"cpq.wizard.steps.customerSelect.searchPlaceholder": "Search customers...",
|
|
1117
|
+
"cpq.wizard.steps.customerSelect.searching": "Searching...",
|
|
1118
|
+
"cpq.wizard.steps.customerSelect.selected": "Selected:",
|
|
1119
|
+
"cpq.wizard.steps.inventorySelect.description": "Select existing customer inventory items (stub — pending inventory domain).",
|
|
1120
|
+
"cpq.wizard.steps.inventorySelect.label": "Inventory Selection",
|
|
1121
|
+
"cpq.wizard.steps.inventorySelect.notImplemented": "This step type is not yet implemented. It will allow selecting existing customer inventory items for modification or renewal once the inventory domain is available.",
|
|
1122
|
+
"cpq.wizard.steps.inventorySelect.title": "Inventory Selection",
|
|
1123
|
+
"cpq.wizard.steps.itemList.count.one": "{count} item",
|
|
1124
|
+
"cpq.wizard.steps.itemList.count.other": "{count} items",
|
|
1125
|
+
"cpq.wizard.steps.itemList.description": "View and manage child items on the quote.",
|
|
1126
|
+
"cpq.wizard.steps.itemList.empty": "No items added yet.",
|
|
1127
|
+
"cpq.wizard.steps.itemList.hint": "Use the offering browser to add items to the quote, then return here.",
|
|
1128
|
+
"cpq.wizard.steps.itemList.label": "Item List",
|
|
1129
|
+
"cpq.wizard.steps.itemList.loading": "Loading items...",
|
|
1130
|
+
"cpq.wizard.steps.itemList.max": "(max: {max})",
|
|
1131
|
+
"cpq.wizard.steps.itemList.min": "(min: {min})",
|
|
1132
|
+
"cpq.wizard.steps.itemList.needsConfiguration": "Needs configuration",
|
|
1133
|
+
"cpq.wizard.steps.itemList.refresh": "Refresh",
|
|
1134
|
+
"cpq.wizard.steps.offeringSelect.add": "+ Add",
|
|
1135
|
+
"cpq.wizard.steps.offeringSelect.added": "Added",
|
|
1136
|
+
"cpq.wizard.steps.offeringSelect.bandwidth.exceeded": "Total bandwidth exceeds port capacity by {excess} MB",
|
|
1137
|
+
"cpq.wizard.steps.offeringSelect.bandwidth.title": "Bandwidth Utilization",
|
|
1138
|
+
"cpq.wizard.steps.offeringSelect.bandwidth.usage": "{used} / {capacity} MB",
|
|
1139
|
+
"cpq.wizard.steps.offeringSelect.description": "Browse and select a product offering from the catalog.",
|
|
1140
|
+
"cpq.wizard.steps.offeringSelect.empty": "No offerings available.",
|
|
1141
|
+
"cpq.wizard.steps.offeringSelect.label": "Offering Selection",
|
|
1142
|
+
"cpq.wizard.steps.offeringSelect.loading": "Loading offerings...",
|
|
1143
|
+
"cpq.wizard.steps.offeringSelect.noAttributes": "No configurable attributes.",
|
|
1144
|
+
"cpq.wizard.steps.offeringSelect.selected": "Selected ({count})",
|
|
1145
|
+
"cpq.wizard.steps.offeringSelect.selectedServices": "Selected Services ({count})",
|
|
1146
|
+
"cpq.wizard.steps.productConfigure.description": "Configure run-time attributes for the selected offering.",
|
|
1147
|
+
"cpq.wizard.steps.productConfigure.label": "Product Configuration",
|
|
1148
|
+
"cpq.wizard.steps.productConfigure.noOffering": "No offering selected. Please go back and select an offering.",
|
|
1149
|
+
"cpq.wizard.steps.review.charges.charge": "Charge",
|
|
1150
|
+
"cpq.wizard.steps.review.charges.price": "Price",
|
|
1151
|
+
"cpq.wizard.steps.review.charges.type": "Type",
|
|
1152
|
+
"cpq.wizard.steps.review.complete": "Complete",
|
|
1153
|
+
"cpq.wizard.steps.review.description": "Review the quote summary and submit.",
|
|
1154
|
+
"cpq.wizard.steps.review.discounts": "Discounts",
|
|
1155
|
+
"cpq.wizard.steps.review.items": "Items ({count})",
|
|
1156
|
+
"cpq.wizard.steps.review.label": "Review & Submit",
|
|
1157
|
+
"cpq.wizard.steps.review.loading": "Loading quote summary...",
|
|
1158
|
+
"cpq.wizard.steps.review.mrcTotal": "MRC Total",
|
|
1159
|
+
"cpq.wizard.steps.review.noData": "No quote data available. Please go back and configure items.",
|
|
1160
|
+
"cpq.wizard.steps.review.nrcTotal": "NRC Total",
|
|
1161
|
+
"cpq.wizard.steps.review.quantity": "Quantity: {quantity}",
|
|
1162
|
+
"cpq.wizard.steps.review.submitting": "Submitting...",
|
|
1163
|
+
"cpq.wizard.steps.review.summaryTitle": "Quote Summary",
|
|
1164
|
+
"cpq.wizard.steps.review.surcharges": "Surcharges",
|
|
1165
|
+
"cpq.wizard.trigger.apiError": "API error {status}",
|
|
1166
|
+
"cpq.wizard.trigger.failed": "Failed to start wizard",
|
|
1167
|
+
"cpq.wizard.trigger.notFound": "No matching wizard found",
|
|
1168
|
+
"cpq.wizard.trigger.start": "Start Wizard",
|
|
1169
|
+
"cpq.wizard.trigger.starting": "Starting...",
|
|
1170
|
+
"cpq.wizards.actions.details": "View details",
|
|
1171
|
+
"cpq.wizards.actions.preview": "Preview",
|
|
1172
|
+
"cpq.wizards.detail.active": "Active",
|
|
1173
|
+
"cpq.wizards.detail.code": "Code",
|
|
1174
|
+
"cpq.wizards.detail.config": "Config",
|
|
1175
|
+
"cpq.wizards.detail.customerSegments": "Customer Segments",
|
|
1176
|
+
"cpq.wizards.detail.noApplicability": "No applicability constraints",
|
|
1177
|
+
"cpq.wizards.detail.noTransitions": "No transitions (terminal step)",
|
|
1178
|
+
"cpq.wizards.detail.none": "none",
|
|
1179
|
+
"cpq.wizards.detail.offeringCodes": "Offering Codes",
|
|
1180
|
+
"cpq.wizards.detail.optional": "optional",
|
|
1181
|
+
"cpq.wizards.detail.priority": "Priority",
|
|
1182
|
+
"cpq.wizards.detail.sections.applicability": "Applicability",
|
|
1183
|
+
"cpq.wizards.detail.sections.general": "General",
|
|
1184
|
+
"cpq.wizards.detail.sections.metadata": "Metadata",
|
|
1185
|
+
"cpq.wizards.detail.sections.paramsSchema": "Parameters Schema",
|
|
1186
|
+
"cpq.wizards.detail.sections.steps": "Steps ({count})",
|
|
1187
|
+
"cpq.wizards.detail.specCodes": "Spec Codes",
|
|
1188
|
+
"cpq.wizards.detail.stepId": "Step ID",
|
|
1189
|
+
"cpq.wizards.detail.surface": "Surface",
|
|
1190
|
+
"cpq.wizards.detail.transitionDefault": "default",
|
|
1191
|
+
"cpq.wizards.detail.transitionWhen": "when {field} {operator}",
|
|
1192
|
+
"cpq.wizards.detail.transitions": "Transitions ({count})",
|
|
1193
|
+
"cpq.wizards.detail.type": "Type",
|
|
1194
|
+
"cpq.wizards.detail.validationRules": "Validation Rules",
|
|
1195
|
+
"cpq.wizards.detail.version": "Version",
|
|
1196
|
+
"cpq.wizards.empty": "No wizard definitions yet. Create one via the API.",
|
|
1197
|
+
"cpq.wizards.filters.isActive": "Active",
|
|
1198
|
+
"cpq.wizards.filters.surface": "Surface",
|
|
1199
|
+
"cpq.wizards.list.error.load": "Failed to load wizards",
|
|
1200
|
+
"cpq.wizards.list.title": "Wizards",
|
|
1201
|
+
"cpq.wizards.runner.allWizards": "All Wizards",
|
|
1202
|
+
"cpq.wizards.runner.backToList": "Back to Wizards",
|
|
1203
|
+
"cpq.wizards.runner.errors.api": "API error {status}",
|
|
1204
|
+
"cpq.wizards.runner.errors.invalidCode": "Invalid wizard definition code",
|
|
1205
|
+
"cpq.wizards.runner.errors.load": "Failed to load wizard",
|
|
1206
|
+
"cpq.wizards.runner.loading": "Loading wizard...",
|
|
1207
|
+
"cpq.wizards.runner.notFound": "Wizard not found.",
|
|
1208
|
+
"cpq.wizards.runner.params.format": "Format: {format}",
|
|
1209
|
+
"cpq.wizards.runner.params.hint": "Fill in the required fields before starting.",
|
|
1210
|
+
"cpq.wizards.runner.params.start": "Preview Wizard",
|
|
1211
|
+
"cpq.wizards.runner.params.title": "This wizard requires input parameters",
|
|
1212
|
+
"cpq.wizards.search.placeholder": "Search wizards...",
|
|
1213
|
+
"cpq.wizards.table.active": "Active",
|
|
1214
|
+
"cpq.wizards.table.code": "Code",
|
|
1215
|
+
"cpq.wizards.table.name": "Name",
|
|
1216
|
+
"cpq.wizards.table.steps": "Steps",
|
|
1217
|
+
"cpq.wizards.table.surface": "Surface",
|
|
1218
|
+
"cpq.wizards.table.version": "Version",
|
|
1219
|
+
"cpq.wizards.title": "Wizards"
|
|
1220
|
+
}
|