@veloceapps/sdk 5.0.14-9 → 5.0.15-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/bundles/veloceapps-sdk-cms.umd.js +133 -66
- package/bundles/veloceapps-sdk-cms.umd.js.map +1 -1
- package/bundles/veloceapps-sdk-core.umd.js +687 -620
- package/bundles/veloceapps-sdk-core.umd.js.map +1 -1
- package/bundles/veloceapps-sdk-runtime.umd.js +209 -142
- package/bundles/veloceapps-sdk-runtime.umd.js.map +1 -1
- package/bundles/veloceapps-sdk.umd.js +200 -133
- package/bundles/veloceapps-sdk.umd.js.map +1 -1
- package/cms/vendor-map.d.ts +15 -12
- package/core/modules/configuration/services/configuration-runtime.service.d.ts +1 -1
- package/core/modules/configuration/services/configuration.service.d.ts +2 -1
- package/core/modules/flow-configuration/services/flow-configuration.service.d.ts +3 -2
- package/esm2015/cms/components/element-children/element-children.component.js +3 -3
- package/esm2015/cms/components/element-children/element-children.module.js +4 -4
- package/esm2015/cms/components/element-renderer/element-renderer.component.js +3 -3
- package/esm2015/cms/components/element-renderer/element-renderer.module.js +4 -4
- package/esm2015/cms/components/plugin.component.js +3 -3
- package/esm2015/cms/components/preview/preview.component.js +3 -3
- package/esm2015/cms/components/preview/preview.module.js +4 -4
- package/esm2015/cms/directives/custom-template.directive.js +3 -3
- package/esm2015/cms/launcher.module.js +4 -4
- package/esm2015/cms/modules/federated/federated.component.js +3 -3
- package/esm2015/cms/modules/federated/federated.module.js +4 -4
- package/esm2015/cms/plugins/configuration.plugin.js +3 -3
- package/esm2015/cms/plugins/io.plugin.js +3 -3
- package/esm2015/cms/plugins/script.plugin.js +3 -3
- package/esm2015/cms/services/dynamic-module.service.js +3 -3
- package/esm2015/cms/services/element-context.service.js +3 -3
- package/esm2015/cms/services/integration.state.js +3 -3
- package/esm2015/cms/services/io-provider.service.js +3 -3
- package/esm2015/cms/services/launcher.service.js +3 -3
- package/esm2015/cms/services/templates.service.js +3 -3
- package/esm2015/core/core.module.js +4 -4
- package/esm2015/core/modules/configuration/configuration.module.js +4 -4
- package/esm2015/core/modules/configuration/services/configuration-runtime.service.js +5 -5
- package/esm2015/core/modules/configuration/services/configuration.service.js +11 -10
- package/esm2015/core/modules/configuration/services/runtime-context.service.js +3 -3
- package/esm2015/core/modules/flow-configuration/flow-configuration.module.js +4 -4
- package/esm2015/core/modules/flow-configuration/services/flow-configuration.service.js +10 -9
- package/esm2015/core/modules/flow-configuration/services/flow-update.service.js +3 -3
- package/esm2015/core/services/context.service.js +3 -3
- package/esm2015/core/services/metric-calculation/metric-calculation.service.js +3 -3
- package/esm2015/core/services/product-images.service.js +3 -3
- package/esm2015/core/services/quote-draft.service.js +3 -3
- package/esm2015/runtime/components/component-preview/component-preview.component.js +4 -4
- package/esm2015/runtime/components/section-renderer/section-renderer.component.js +3 -3
- package/esm2015/runtime/components/ui-runtime/runtime.component.js +3 -3
- package/esm2015/runtime/components/ui-runtime-preview/runtime-preview.component.js +3 -3
- package/esm2015/runtime/execution/components/children-placeholder/children-placeholder.component.js +6 -6
- package/esm2015/runtime/execution/components/context-provider/context-provider.component.js +3 -3
- package/esm2015/runtime/execution/components/execution-section-renderer/execution-section-renderer.component.js +3 -3
- package/esm2015/runtime/execution/components/federated/federated.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-attribute/velo-attribute.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-multiselect/velo-multiselect.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-port-checkbox/velo-port-checkbox.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-port-dropdown/velo-port-dropdown.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-port-radio/velo-port-radio.component.js +3 -3
- package/esm2015/runtime/execution/components/velo-type/velo-type.component.js +3 -3
- package/esm2015/runtime/execution/directives/section-script.directive.js +3 -3
- package/esm2015/runtime/execution/directives/sf-query.directive.js +3 -3
- package/esm2015/runtime/execution/directives/velo-attribute.directive.js +3 -3
- package/esm2015/runtime/execution/directives/velo-port.directive.js +18 -18
- package/esm2015/runtime/execution/directives/vl-approval.directive.js +3 -3
- package/esm2015/runtime/execution/directives/vl-document-attachments.directive.js +3 -3
- package/esm2015/runtime/execution/directives/vl-document-templates.directive.js +3 -3
- package/esm2015/runtime/execution/directives/vl-quote.directive.js +3 -3
- package/esm2015/runtime/execution/directives/vl-ramp.directive.js +3 -3
- package/esm2015/runtime/execution/runtime-execution.module.js +4 -4
- package/esm2015/runtime/runtime.module.js +4 -4
- package/esm2015/runtime/services/cart.service.js +3 -3
- package/esm2015/runtime/services/collapsible-state.service.js +3 -3
- package/esm2015/runtime/services/configuration.service.js +3 -3
- package/esm2015/runtime/services/current-state.service.js +3 -3
- package/esm2015/runtime/services/form-scope.service.js +3 -3
- package/esm2015/runtime/services/product-model-cache.service.js +3 -3
- package/esm2015/runtime/services/runtime-context.service.js +3 -3
- package/esm2015/runtime/services/runtime-form.service.js +3 -3
- package/esm2015/runtime/services/runtime.service.js +3 -3
- package/esm2015/runtime/services/section-helper.service.js +3 -3
- package/esm2015/runtime/services/section-scope.service.js +3 -3
- package/esm2015/runtime/services/section-store.service.js +3 -3
- package/esm2015/runtime/services/section.service.js +6 -6
- package/esm2015/src/components/dialog/dialog.component.js +3 -3
- package/esm2015/src/components/dialog/dialog.module.js +4 -4
- package/esm2015/src/components/doc-gen/doc-gen.component.js +3 -3
- package/esm2015/src/components/doc-gen/doc-gen.module.js +4 -4
- package/esm2015/src/components/header/cart-overlay/cart-preview.component.js +3 -3
- package/esm2015/src/components/header/cart-overlay/cart-preview.module.js +4 -4
- package/esm2015/src/components/header/header.component.js +3 -3
- package/esm2015/src/components/header/header.module.js +4 -4
- package/esm2015/src/components/header/metrics/metrics.component.js +3 -3
- package/esm2015/src/components/header/metrics/metrics.module.js +4 -4
- package/esm2015/src/flow-routing.module.js +4 -4
- package/esm2015/src/flow.component.js +3 -3
- package/esm2015/src/flow.module.js +4 -4
- package/esm2015/src/guards/context.guard.js +3 -3
- package/esm2015/src/guards/product-unload.guard.js +3 -3
- package/esm2015/src/guards/root.guard.js +3 -3
- package/esm2015/src/pages/catalog/catalog.component.js +3 -3
- package/esm2015/src/pages/catalog/catalog.module.js +4 -4
- package/esm2015/src/pages/debug/debug.component.js +3 -3
- package/esm2015/src/pages/debug/debug.module.js +4 -4
- package/esm2015/src/pages/empty-account/empty-account.component.js +3 -3
- package/esm2015/src/pages/empty-account/empty-account.module.js +4 -4
- package/esm2015/src/pages/legacy-product/legacy-product.component.js +3 -3
- package/esm2015/src/pages/legacy-product/legacy-product.module.js +4 -4
- package/esm2015/src/pages/product/product.component.js +3 -3
- package/esm2015/src/pages/product/product.module.js +4 -4
- package/esm2015/src/pages/record-not-found/record-not-found.component.js +3 -3
- package/esm2015/src/pages/record-not-found/record-not-found.module.js +4 -4
- package/esm2015/src/pages/remote/remote.component.js +3 -3
- package/esm2015/src/pages/remote/remote.module.js +4 -4
- package/esm2015/src/pages/shopping-cart/shopping-cart.component.js +3 -3
- package/esm2015/src/pages/shopping-cart/shopping-cart.module.js +4 -4
- package/esm2015/src/resolvers/flow.resolver.js +3 -3
- package/esm2015/src/resolvers/quote.resolver.js +3 -3
- package/esm2015/src/services/doc-gen.service.js +3 -3
- package/esm2015/src/services/flow-dialog.service.js +3 -3
- package/esm2015/src/services/flow-router.service.js +3 -3
- package/esm2015/src/services/flow.service.js +3 -3
- package/fesm2015/veloceapps-sdk-cms.js +62 -62
- package/fesm2015/veloceapps-sdk-cms.js.map +1 -1
- package/fesm2015/veloceapps-sdk-core.js +460 -460
- package/fesm2015/veloceapps-sdk-core.js.map +1 -1
- package/fesm2015/veloceapps-sdk-runtime.js +138 -138
- package/fesm2015/veloceapps-sdk-runtime.js.map +1 -1
- package/fesm2015/veloceapps-sdk.js +129 -129
- package/fesm2015/veloceapps-sdk.js.map +1 -1
- package/package.json +1 -1
@@ -1,14 +1,14 @@
|
|
1
1
|
import * as i0 from '@angular/core';
|
2
2
|
import { Injectable, NgModule } from '@angular/core';
|
3
|
-
import { UUID, ConfigurationContext,
|
4
|
-
import { BehaviorSubject, zip, noop,
|
5
|
-
import { filter, tap, map, switchMap, skip, take, shareReplay,
|
3
|
+
import { UUID, ConfigurationContext, RuntimeModel, ConfigurationContextMode, SalesforceIdUtils, ConfigurationMode, ChargeGroupUtils } from '@veloceapps/core';
|
4
|
+
import { BehaviorSubject, combineLatest, zip, noop, throwError, shareReplay as shareReplay$1, tap as tap$1, map as map$2, of, switchMap as switchMap$1, catchError as catchError$1, Subject, take as take$1, distinctUntilChanged } from 'rxjs';
|
5
|
+
import { filter, tap, map, first, switchMap, skip, take, shareReplay, catchError, finalize } from 'rxjs/operators';
|
6
6
|
import * as i1 from '@veloceapps/api';
|
7
7
|
import { PriceApiService, ContextApiService, ProductModelApiService, ConfigurationApiService } from '@veloceapps/api';
|
8
|
-
import { merge,
|
8
|
+
import { merge, flatten, sortBy, map as map$1, isEqual, cloneDeep, uniq } from 'lodash';
|
9
9
|
import { ToastType, ConfirmationComponent, ConfirmationDialogModule } from '@veloceapps/components';
|
10
|
-
import * as
|
11
|
-
import * as
|
10
|
+
import * as i5 from 'primeng/api';
|
11
|
+
import * as i6 from 'primeng/dynamicdialog';
|
12
12
|
import moment from 'moment';
|
13
13
|
|
14
14
|
const getDefaultLineItem = (context, uiDefinitionProperties, qty = 1) => {
|
@@ -72,357 +72,13 @@ class ContextService {
|
|
72
72
|
this.context.next(null);
|
73
73
|
}
|
74
74
|
}
|
75
|
-
ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
76
|
-
ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.
|
77
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
75
|
+
ContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ContextService, deps: [{ token: i1.ContextApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
76
|
+
ContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ContextService, providedIn: 'root' });
|
77
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ContextService, decorators: [{
|
78
78
|
type: Injectable,
|
79
79
|
args: [{ providedIn: 'root' }]
|
80
80
|
}], ctorParameters: function () { return [{ type: i1.ContextApiService }]; } });
|
81
81
|
|
82
|
-
function calculateMetricByMethod(lineItems, metric, method) {
|
83
|
-
const items = getLineItemsByMethod(lineItems, method);
|
84
|
-
return items.reduce((acc, li) => {
|
85
|
-
let value = li.reduce((accProduct, item) => accProduct + ((item.totalMetrics && item.totalMetrics[metric]) || 0), 0);
|
86
|
-
if (method === 'avg' && li.length > 0) {
|
87
|
-
value /= li.length;
|
88
|
-
}
|
89
|
-
return acc + value;
|
90
|
-
}, 0);
|
91
|
-
}
|
92
|
-
function getLineItemsByMethod(lineItems, method) {
|
93
|
-
switch (method) {
|
94
|
-
case 'first': {
|
95
|
-
return lineItems.filter(li => !li.rampInstanceId).map(item => [item]);
|
96
|
-
}
|
97
|
-
case 'last': {
|
98
|
-
const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
|
99
|
-
const products = rootTermItems.map(lineItem => [
|
100
|
-
lineItem,
|
101
|
-
...lineItems.filter(li => li.rampInstanceId === lineItem.id),
|
102
|
-
]);
|
103
|
-
return products
|
104
|
-
.map(items => [...items].sort((a, b) => getDateValue(a.endDate || '') - getDateValue(b.endDate || '')).pop())
|
105
|
-
.filter((li) => Boolean(li))
|
106
|
-
.map(item => [item]);
|
107
|
-
}
|
108
|
-
case 'avg': {
|
109
|
-
const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
|
110
|
-
return rootTermItems.map(lineItem => [lineItem, ...lineItems.filter(li => li.rampInstanceId === lineItem.id)]);
|
111
|
-
}
|
112
|
-
case 'sum': {
|
113
|
-
return lineItems.map(item => [item]);
|
114
|
-
}
|
115
|
-
default: {
|
116
|
-
return lineItems.map(item => [item]);
|
117
|
-
}
|
118
|
-
}
|
119
|
-
}
|
120
|
-
function getDateValue(date) {
|
121
|
-
return date ? new Date(date).getTime() : 0;
|
122
|
-
}
|
123
|
-
|
124
|
-
class QuoteDraftService {
|
125
|
-
constructor(context, quoteApiService, priceApiService) {
|
126
|
-
this.context = context;
|
127
|
-
this.quoteApiService = quoteApiService;
|
128
|
-
this.priceApiService = priceApiService;
|
129
|
-
this.quoteSubj$ = new BehaviorSubject(null);
|
130
|
-
this.resetSubj$ = new BehaviorSubject(true);
|
131
|
-
this.isInitializedSubj$ = new BehaviorSubject(false);
|
132
|
-
this.initialCurrentState = [];
|
133
|
-
this._hasUnsavedChanges = false;
|
134
|
-
this.allPriceLists = [];
|
135
|
-
this.assetPriceLists = [];
|
136
|
-
this.reset$ = this.resetSubj$.asObservable();
|
137
|
-
this.activePriceList$ = this.context.resolve$().pipe(map(ctx => this.allPriceLists.find(priceList => priceList.id === ctx.properties.PriceListId)), map(priceList => priceList !== null && priceList !== void 0 ? priceList : null));
|
138
|
-
this.isInitializedSubj$
|
139
|
-
.pipe(filter(isInitialized => isInitialized), switchMap(() => this.quoteSubj$.asObservable()), skip(1), tap(quote => this.markAsUpdated(quote)))
|
140
|
-
.subscribe();
|
141
|
-
}
|
142
|
-
get isInitialized() {
|
143
|
-
return this.isInitializedSubj$.getValue();
|
144
|
-
}
|
145
|
-
set isInitialized(value) {
|
146
|
-
if (this.isInitialized !== value) {
|
147
|
-
this.isInitializedSubj$.next(value);
|
148
|
-
}
|
149
|
-
}
|
150
|
-
get hasUnsavedChanges() {
|
151
|
-
return this._hasUnsavedChanges;
|
152
|
-
}
|
153
|
-
set hasUnsavedChanges(value) {
|
154
|
-
var _a, _b;
|
155
|
-
this._hasUnsavedChanges = value;
|
156
|
-
if (!this._hasUnsavedChanges) {
|
157
|
-
this.initialCurrentState = (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
|
158
|
-
}
|
159
|
-
}
|
160
|
-
get hasAssets$() {
|
161
|
-
return this.quoteSubj$.pipe(map(() => this.hasAssets));
|
162
|
-
}
|
163
|
-
get hasAssets() {
|
164
|
-
const quoteDraft = this.quoteSubj$.value;
|
165
|
-
return Boolean(quoteDraft && quoteDraft.currentState.length > 0);
|
166
|
-
}
|
167
|
-
reset() {
|
168
|
-
this.resetSubj$.next(true);
|
169
|
-
this.quoteSubj$.next(null);
|
170
|
-
this.hasUnsavedChanges = false;
|
171
|
-
}
|
172
|
-
init(quoteId, params) {
|
173
|
-
return zip(this.quoteApiService.getQuoteDraft(quoteId, params), this.priceApiService.getPriceLists()).pipe(tap(([quote, allPriceLists]) => {
|
174
|
-
this.allPriceLists = allPriceLists;
|
175
|
-
this.quoteSubj$.next(quote);
|
176
|
-
this.context.update(quote.context);
|
177
|
-
this.populateActivePriceLists$();
|
178
|
-
}), map(() => noop()), take(1));
|
179
|
-
}
|
180
|
-
setCurrentLineItemState(lineItems) {
|
181
|
-
const quoteDraft = this.quoteSubj$.value;
|
182
|
-
if (!quoteDraft) {
|
183
|
-
return;
|
184
|
-
}
|
185
|
-
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), { currentState: lineItems }));
|
186
|
-
}
|
187
|
-
updateQuoteDraft(update) {
|
188
|
-
const quoteDraft = this.quoteSubj$.value;
|
189
|
-
if (!quoteDraft) {
|
190
|
-
return;
|
191
|
-
}
|
192
|
-
if (update.context) {
|
193
|
-
this.context.set(update.context);
|
194
|
-
}
|
195
|
-
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), update));
|
196
|
-
}
|
197
|
-
updateByPriceSummary(priceSummary) {
|
198
|
-
const quoteDraft = this.quoteSubj$.value;
|
199
|
-
if (!quoteDraft) {
|
200
|
-
return;
|
201
|
-
}
|
202
|
-
const updatedCurrentState = this.currentState.map(lineItem => {
|
203
|
-
const updated = priceSummary.lineItems.find(li => li.id === lineItem.id);
|
204
|
-
return updated !== null && updated !== void 0 ? updated : lineItem;
|
205
|
-
});
|
206
|
-
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedCurrentState, totalPrices: priceSummary.totalPrices, approvalItems: priceSummary.approvalItems }));
|
207
|
-
}
|
208
|
-
get quoteDraft$() {
|
209
|
-
return combineLatest([this.quoteSubj$, this.context.resolve$()]).pipe(map(() => this.quoteDraft), filter((quote) => Boolean(quote)), shareReplay());
|
210
|
-
}
|
211
|
-
get quoteDraft() {
|
212
|
-
const quote = this.quoteSubj$.value;
|
213
|
-
if (!quote) {
|
214
|
-
return null;
|
215
|
-
}
|
216
|
-
return Object.assign(Object.assign({}, quote), { context: this.context.resolve() });
|
217
|
-
}
|
218
|
-
get quoteDraftForActivePriceList() {
|
219
|
-
const quoteDraft = this.quoteDraft;
|
220
|
-
if (!quoteDraft) {
|
221
|
-
return null;
|
222
|
-
}
|
223
|
-
return Object.assign(Object.assign({}, quoteDraft), { initialState: this.filterByActivePriceList(quoteDraft.initialState), currentState: this.filterByActivePriceList(quoteDraft.currentState) });
|
224
|
-
}
|
225
|
-
get currentState$() {
|
226
|
-
return this.quoteDraft$.pipe(map(quote => quote.currentState));
|
227
|
-
}
|
228
|
-
get currentState() {
|
229
|
-
var _a, _b;
|
230
|
-
return (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
|
231
|
-
}
|
232
|
-
/**
|
233
|
-
* Stream of activeCurrentState
|
234
|
-
*/
|
235
|
-
get activeCurrentState$() {
|
236
|
-
return this.quoteDraft$.pipe(map(() => this.activeCurrentState));
|
237
|
-
}
|
238
|
-
/**
|
239
|
-
* activeCurrentState is currentState passed through additional filters
|
240
|
-
*/
|
241
|
-
get activeCurrentState() {
|
242
|
-
var _a, _b;
|
243
|
-
let currentState = (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
|
244
|
-
currentState = this.filterByActivePriceList(currentState);
|
245
|
-
return currentState;
|
246
|
-
}
|
247
|
-
/**
|
248
|
-
* Stream of activeInitialState
|
249
|
-
*/
|
250
|
-
get activeInitialState$() {
|
251
|
-
return this.quoteDraft$.pipe(map(() => this.activeInitialState));
|
252
|
-
}
|
253
|
-
/**
|
254
|
-
* activeInitialState is initialState passed through additional filters
|
255
|
-
*/
|
256
|
-
get activeInitialState() {
|
257
|
-
var _a, _b;
|
258
|
-
const ctx = this.context.resolve();
|
259
|
-
let initialState = (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.initialState) !== null && _b !== void 0 ? _b : [];
|
260
|
-
if (ctx.mode === ConfigurationContextMode.ACCOUNT) {
|
261
|
-
initialState = this.filterByActivePriceList(initialState);
|
262
|
-
}
|
263
|
-
return initialState;
|
264
|
-
}
|
265
|
-
get isStandalone() {
|
266
|
-
return this.context.resolve().properties.standalone === 'true';
|
267
|
-
}
|
268
|
-
get isStandalone$() {
|
269
|
-
return this.context.resolve$().pipe(map(() => this.isStandalone));
|
270
|
-
}
|
271
|
-
getInitialCurrentState() {
|
272
|
-
return this.initialCurrentState;
|
273
|
-
}
|
274
|
-
isEditMode$() {
|
275
|
-
return this.context.resolve$().pipe(map(() => this.isEditMode()));
|
276
|
-
}
|
277
|
-
isEditMode() {
|
278
|
-
const context = this.context.resolve();
|
279
|
-
if (context.mode === ConfigurationContextMode.ACCOUNT) {
|
280
|
-
return true;
|
281
|
-
}
|
282
|
-
if (context.mode === ConfigurationContextMode.QUOTE) {
|
283
|
-
return context.properties.Status === 'Draft';
|
284
|
-
}
|
285
|
-
return false;
|
286
|
-
}
|
287
|
-
updateActivePriceList(priceListId) {
|
288
|
-
this.context.update({ properties: { PriceListId: priceListId } });
|
289
|
-
}
|
290
|
-
populateActivePriceLists$() {
|
291
|
-
const ctx = this.context.resolve();
|
292
|
-
const quoteDraft = this.quoteDraft;
|
293
|
-
if (!quoteDraft) {
|
294
|
-
return;
|
295
|
-
}
|
296
|
-
// In ACCOUNT mode populate price lists from related assets
|
297
|
-
if (ctx.mode === ConfigurationContextMode.ACCOUNT) {
|
298
|
-
// Populate list of price lists
|
299
|
-
this.assetPriceLists = quoteDraft.currentState
|
300
|
-
.map(({ priceListId }) => priceListId)
|
301
|
-
.reduce((trunk, priceListId) => {
|
302
|
-
var _a, _b;
|
303
|
-
if (!priceListId || trunk.some(item => item.id === priceListId)) {
|
304
|
-
return trunk;
|
305
|
-
}
|
306
|
-
return [
|
307
|
-
...trunk,
|
308
|
-
{ id: priceListId, name: (_b = (_a = this.allPriceLists.find(item => item.id === priceListId)) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '' },
|
309
|
-
];
|
310
|
-
}, []);
|
311
|
-
}
|
312
|
-
}
|
313
|
-
filterByActivePriceList(lineItems) {
|
314
|
-
const ctx = this.context.resolve();
|
315
|
-
return lineItems.filter(li => !li.priceListId || li.priceListId === ctx.properties.PriceListId);
|
316
|
-
}
|
317
|
-
markAsUpdated(quote) {
|
318
|
-
if ((quote === null || quote === void 0 ? void 0 : quote.context.properties.mode) === ConfigurationContextMode.ACCOUNT) {
|
319
|
-
this.hasUnsavedChanges = !!quote && !quote.currentState.every(li => li.actionCode === 'EXIST');
|
320
|
-
}
|
321
|
-
else {
|
322
|
-
this.hasUnsavedChanges = !isEqual(this.initialCurrentState, quote === null || quote === void 0 ? void 0 : quote.currentState);
|
323
|
-
}
|
324
|
-
}
|
325
|
-
}
|
326
|
-
QuoteDraftService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteDraftService, deps: [{ token: ContextService }, { token: i1.QuoteApiService }, { token: i1.PriceApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
327
|
-
QuoteDraftService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteDraftService, providedIn: 'root' });
|
328
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: QuoteDraftService, decorators: [{
|
329
|
-
type: Injectable,
|
330
|
-
args: [{ providedIn: 'root' }]
|
331
|
-
}], ctorParameters: function () { return [{ type: ContextService }, { type: i1.QuoteApiService }, { type: i1.PriceApiService }]; } });
|
332
|
-
|
333
|
-
class MetricsCalculationService {
|
334
|
-
constructor(quoteDraftService, settingsService) {
|
335
|
-
this.quoteDraftService = quoteDraftService;
|
336
|
-
this.settingsService = settingsService;
|
337
|
-
this.metricsUpdated$ = new Subject();
|
338
|
-
this.quoteMetricsSettings = {};
|
339
|
-
this.metricsCalculationMethodMap = {};
|
340
|
-
this.metricsData = {};
|
341
|
-
combineLatest([
|
342
|
-
this.quoteDraftService.currentState$,
|
343
|
-
this.settingsService.fetchSetting('QUOTE_LEVEL_METRIC_CALCULATION_METHOD').pipe(take$1(1)),
|
344
|
-
]).subscribe(([lineItems, setting]) => {
|
345
|
-
let settingsData = {};
|
346
|
-
try {
|
347
|
-
settingsData = JSON.parse((setting === null || setting === void 0 ? void 0 : setting.value) || '{}');
|
348
|
-
}
|
349
|
-
catch (error) {
|
350
|
-
settingsData = {};
|
351
|
-
}
|
352
|
-
this.quoteMetricsSettings = settingsData;
|
353
|
-
this.updateMetrics(lineItems);
|
354
|
-
});
|
355
|
-
}
|
356
|
-
get onMetricsUpdate$() {
|
357
|
-
return this.metricsUpdated$.asObservable();
|
358
|
-
}
|
359
|
-
getMetricValue(metric) {
|
360
|
-
return this.metricsData[metric] || 0;
|
361
|
-
}
|
362
|
-
updateMetrics(lineItems) {
|
363
|
-
const metricKeys = this.collectMetricKeys(lineItems).filter(key => !key.includes('Effective_'));
|
364
|
-
this.metricsCalculationMethodMap = this.buildMetricsCalculationMethods(metricKeys, this.metricsCalculationMethodMap);
|
365
|
-
this.metricsData = metricKeys.reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: this.calculateMetric(lineItems, key) })), {});
|
366
|
-
this.metricsUpdated$.next();
|
367
|
-
}
|
368
|
-
calculateMetric(lineItems, metric) {
|
369
|
-
return calculateMetricByMethod(lineItems, metric, this.metricsCalculationMethodMap[metric] || 'sum');
|
370
|
-
}
|
371
|
-
buildMetricsCalculationMethods(metricKeys, initial) {
|
372
|
-
return metricKeys.reduce((acc, name) => {
|
373
|
-
if (acc[name]) {
|
374
|
-
return acc;
|
375
|
-
}
|
376
|
-
acc = Object.assign(Object.assign({}, acc), { [name]: 'sum' });
|
377
|
-
const settingKey = name.replace(/VDM_|Total_/g, '');
|
378
|
-
if (this.quoteMetricsSettings[settingKey]) {
|
379
|
-
acc = Object.assign(Object.assign({}, acc), { [name]: this.quoteMetricsSettings[settingKey] });
|
380
|
-
}
|
381
|
-
return acc;
|
382
|
-
}, initial);
|
383
|
-
}
|
384
|
-
collectMetricKeys(lineItems) {
|
385
|
-
const keys = [];
|
386
|
-
lineItems.forEach(lineItem => {
|
387
|
-
keys.push(...Object.keys(lineItem.totalMetrics || {}));
|
388
|
-
keys.push(...this.collectMetricKeys(lineItem.lineItems));
|
389
|
-
});
|
390
|
-
return uniq(keys);
|
391
|
-
}
|
392
|
-
}
|
393
|
-
MetricsCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: MetricsCalculationService, deps: [{ token: QuoteDraftService }, { token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
394
|
-
MetricsCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: MetricsCalculationService, providedIn: 'root' });
|
395
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: MetricsCalculationService, decorators: [{
|
396
|
-
type: Injectable,
|
397
|
-
args: [{ providedIn: 'root' }]
|
398
|
-
}], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: i1.ConfigurationSettingsApiService }]; } });
|
399
|
-
|
400
|
-
class ProductImagesService {
|
401
|
-
constructor(productApiService) {
|
402
|
-
this.productApiService = productApiService;
|
403
|
-
this.imagesMap$ = new BehaviorSubject({});
|
404
|
-
}
|
405
|
-
getImageUrl$(productId) {
|
406
|
-
if (this.imagesMap$.value[productId] == null) {
|
407
|
-
this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: '' }));
|
408
|
-
this.fetchProductImage(productId);
|
409
|
-
}
|
410
|
-
return this.imagesMap$.pipe(map$1(imagesMap => imagesMap[productId]), distinctUntilChanged());
|
411
|
-
}
|
412
|
-
fetchProductImage(productId) {
|
413
|
-
this.productApiService
|
414
|
-
.fetchImage$(productId)
|
415
|
-
.pipe(map$1(file => URL.createObjectURL(file)), catchError(() => of('')), tap$1(url => this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: url }))))
|
416
|
-
.subscribe();
|
417
|
-
}
|
418
|
-
}
|
419
|
-
ProductImagesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ProductImagesService, deps: [{ token: i1.ProductApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
420
|
-
ProductImagesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ProductImagesService, providedIn: 'root' });
|
421
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: ProductImagesService, decorators: [{
|
422
|
-
type: Injectable,
|
423
|
-
args: [{ providedIn: 'root' }]
|
424
|
-
}], ctorParameters: function () { return [{ type: i1.ProductApiService }]; } });
|
425
|
-
|
426
82
|
class RuntimeContextService {
|
427
83
|
constructor(configurationApiService) {
|
428
84
|
this.configurationApiService = configurationApiService;
|
@@ -462,9 +118,9 @@ class RuntimeContextService {
|
|
462
118
|
return uiDefinition;
|
463
119
|
}
|
464
120
|
}
|
465
|
-
RuntimeContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
466
|
-
RuntimeContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.
|
467
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
121
|
+
RuntimeContextService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeContextService, deps: [{ token: i1.ConfigurationApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
122
|
+
RuntimeContextService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeContextService });
|
123
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RuntimeContextService, decorators: [{
|
468
124
|
type: Injectable
|
469
125
|
}], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }]; } });
|
470
126
|
|
@@ -545,9 +201,9 @@ class ConfigurationRuntimeService {
|
|
545
201
|
return this._runtimeContext;
|
546
202
|
}
|
547
203
|
}
|
548
|
-
ConfigurationRuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
549
|
-
ConfigurationRuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.
|
550
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
204
|
+
ConfigurationRuntimeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationRuntimeService, deps: [{ token: i1.ConfigurationApiService }, { token: ContextService }, { token: RuntimeContextService }], target: i0.ɵɵFactoryTarget.Injectable });
|
205
|
+
ConfigurationRuntimeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationRuntimeService });
|
206
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationRuntimeService, decorators: [{
|
551
207
|
type: Injectable
|
552
208
|
}], ctorParameters: function () { return [{ type: i1.ConfigurationApiService }, { type: ContextService }, { type: RuntimeContextService }]; } });
|
553
209
|
|
@@ -622,78 +278,287 @@ const patchAttributes = (rootLineItem, id, attrs) => {
|
|
622
278
|
if (!lineItem) {
|
623
279
|
return rootLineItem;
|
624
280
|
}
|
625
|
-
const attributes = upsertAttributes(lineItem.attributes, attrs);
|
626
|
-
return replaceLineItem(rootLineItem, Object.assign(Object.assign({}, lineItem), { attributes }));
|
627
|
-
};
|
628
|
-
const getAttributeValue = (attributes, name) => { var _a; return (_a = attributes.find(attr => attr.name === name)) === null || _a === void 0 ? void 0 : _a.value; };
|
629
|
-
const generateLineItem = (port, type, parentId, attributes = [], lineItems = []) => {
|
630
|
-
return {
|
631
|
-
id: UUID.UUID(),
|
632
|
-
port,
|
633
|
-
type,
|
634
|
-
actionCode: 'ADD',
|
635
|
-
cfgStatus: 'New',
|
636
|
-
attributes: attributes.map(({ name, value }) => ({ cfgStatus: 'User', name, value })),
|
637
|
-
lineItems,
|
638
|
-
parentId,
|
639
|
-
qty: 1,
|
640
|
-
};
|
641
|
-
};
|
642
|
-
const getRecommendedPrices = (portDomain, type) => {
|
643
|
-
var _a, _b;
|
644
|
-
const domainType = portDomain.domainTypes.find(({ name }) => name === type);
|
645
|
-
const [net, list] = (_b = (_a = domainType === null || domainType === void 0 ? void 0 : domainType.recommendedPrices) === null || _a === void 0 ? void 0 : _a.filter(({ chargeMethod }) => chargeMethod === 'ONE_TIME').reduce((acc, rp) => {
|
646
|
-
const [netPrice, listPrice] = acc;
|
647
|
-
return [netPrice + rp.netPrice, listPrice + rp.listPrice];
|
648
|
-
}, [0, 0])) !== null && _b !== void 0 ? _b : [0, 0];
|
649
|
-
return { net, list };
|
650
|
-
};
|
651
|
-
const multiplyLineItems = (lineItem, qty, split) => {
|
652
|
-
if (split) {
|
653
|
-
const unifyIds = (lineItem) => (Object.assign(Object.assign({}, lineItem), { id: UUID.UUID(), lineItems: lineItem.lineItems.map(unifyIds) }));
|
654
|
-
return map$
|
281
|
+
const attributes = upsertAttributes(lineItem.attributes, attrs);
|
282
|
+
return replaceLineItem(rootLineItem, Object.assign(Object.assign({}, lineItem), { attributes }));
|
283
|
+
};
|
284
|
+
const getAttributeValue = (attributes, name) => { var _a; return (_a = attributes.find(attr => attr.name === name)) === null || _a === void 0 ? void 0 : _a.value; };
|
285
|
+
const generateLineItem = (port, type, parentId, attributes = [], lineItems = []) => {
|
286
|
+
return {
|
287
|
+
id: UUID.UUID(),
|
288
|
+
port,
|
289
|
+
type,
|
290
|
+
actionCode: 'ADD',
|
291
|
+
cfgStatus: 'New',
|
292
|
+
attributes: attributes.map(({ name, value }) => ({ cfgStatus: 'User', name, value })),
|
293
|
+
lineItems,
|
294
|
+
parentId,
|
295
|
+
qty: 1,
|
296
|
+
};
|
297
|
+
};
|
298
|
+
const getRecommendedPrices = (portDomain, type) => {
|
299
|
+
var _a, _b;
|
300
|
+
const domainType = portDomain.domainTypes.find(({ name }) => name === type);
|
301
|
+
const [net, list] = (_b = (_a = domainType === null || domainType === void 0 ? void 0 : domainType.recommendedPrices) === null || _a === void 0 ? void 0 : _a.filter(({ chargeMethod }) => chargeMethod === 'ONE_TIME').reduce((acc, rp) => {
|
302
|
+
const [netPrice, listPrice] = acc;
|
303
|
+
return [netPrice + rp.netPrice, listPrice + rp.listPrice];
|
304
|
+
}, [0, 0])) !== null && _b !== void 0 ? _b : [0, 0];
|
305
|
+
return { net, list };
|
306
|
+
};
|
307
|
+
const multiplyLineItems = (lineItem, qty, split) => {
|
308
|
+
if (split) {
|
309
|
+
const unifyIds = (lineItem) => (Object.assign(Object.assign({}, lineItem), { id: UUID.UUID(), lineItems: lineItem.lineItems.map(unifyIds) }));
|
310
|
+
return map$1(new Array(qty), () => unifyIds(lineItem));
|
311
|
+
}
|
312
|
+
else {
|
313
|
+
return [
|
314
|
+
Object.assign(Object.assign({}, lineItem), { qty: qty }),
|
315
|
+
];
|
316
|
+
}
|
317
|
+
};
|
318
|
+
|
319
|
+
var lineItem_utils = /*#__PURE__*/Object.freeze({
|
320
|
+
__proto__: null,
|
321
|
+
findLineItem: findLineItem,
|
322
|
+
findLineItemWithComparator: findLineItemWithComparator,
|
323
|
+
insertLineItem: insertLineItem,
|
324
|
+
removeLineItem: removeLineItem,
|
325
|
+
replaceLineItem: replaceLineItem,
|
326
|
+
mapAttributes: mapAttributes,
|
327
|
+
getAttributes: getAttributes,
|
328
|
+
upsertAttributes: upsertAttributes,
|
329
|
+
patchAttributes: patchAttributes,
|
330
|
+
getAttributeValue: getAttributeValue,
|
331
|
+
generateLineItem: generateLineItem,
|
332
|
+
getRecommendedPrices: getRecommendedPrices,
|
333
|
+
multiplyLineItems: multiplyLineItems
|
334
|
+
});
|
335
|
+
|
336
|
+
class LineItemWorker {
|
337
|
+
constructor(src) {
|
338
|
+
this.li = Object.assign({}, src);
|
339
|
+
}
|
340
|
+
insert(parentId, toInsert) {
|
341
|
+
return new LineItemWorker(insertLineItem(this.li, parentId, toInsert));
|
342
|
+
}
|
343
|
+
remove(id) {
|
344
|
+
return new LineItemWorker(removeLineItem(this.li, id));
|
345
|
+
}
|
346
|
+
replace(toReplace) {
|
347
|
+
return new LineItemWorker(replaceLineItem(this.li, toReplace));
|
348
|
+
}
|
349
|
+
patchAttribute(attrs, id) {
|
350
|
+
return new LineItemWorker(patchAttributes(this.li, id !== null && id !== void 0 ? id : this.li.id, attrs));
|
351
|
+
}
|
352
|
+
}
|
353
|
+
|
354
|
+
class QuoteDraftService {
|
355
|
+
constructor(context, quoteApiService, priceApiService) {
|
356
|
+
this.context = context;
|
357
|
+
this.quoteApiService = quoteApiService;
|
358
|
+
this.priceApiService = priceApiService;
|
359
|
+
this.quoteSubj$ = new BehaviorSubject(null);
|
360
|
+
this.resetSubj$ = new BehaviorSubject(true);
|
361
|
+
this.isInitializedSubj$ = new BehaviorSubject(false);
|
362
|
+
this.initialCurrentState = [];
|
363
|
+
this._hasUnsavedChanges = false;
|
364
|
+
this.allPriceLists = [];
|
365
|
+
this.assetPriceLists = [];
|
366
|
+
this.reset$ = this.resetSubj$.asObservable();
|
367
|
+
this.activePriceList$ = this.context.resolve$().pipe(map(ctx => this.allPriceLists.find(priceList => priceList.id === ctx.properties.PriceListId)), map(priceList => priceList !== null && priceList !== void 0 ? priceList : null));
|
368
|
+
this.isInitializedSubj$
|
369
|
+
.pipe(filter(isInitialized => isInitialized), switchMap(() => this.quoteSubj$.asObservable()), skip(1), tap(quote => this.markAsUpdated(quote)))
|
370
|
+
.subscribe();
|
371
|
+
}
|
372
|
+
get isInitialized() {
|
373
|
+
return this.isInitializedSubj$.getValue();
|
374
|
+
}
|
375
|
+
set isInitialized(value) {
|
376
|
+
if (this.isInitialized !== value) {
|
377
|
+
this.isInitializedSubj$.next(value);
|
378
|
+
}
|
379
|
+
}
|
380
|
+
get hasUnsavedChanges() {
|
381
|
+
return this._hasUnsavedChanges;
|
382
|
+
}
|
383
|
+
set hasUnsavedChanges(value) {
|
384
|
+
var _a, _b;
|
385
|
+
this._hasUnsavedChanges = value;
|
386
|
+
if (!this._hasUnsavedChanges) {
|
387
|
+
this.initialCurrentState = (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
|
388
|
+
}
|
389
|
+
}
|
390
|
+
get hasAssets$() {
|
391
|
+
return this.quoteSubj$.pipe(map(() => this.hasAssets));
|
392
|
+
}
|
393
|
+
get hasAssets() {
|
394
|
+
const quoteDraft = this.quoteSubj$.value;
|
395
|
+
return Boolean(quoteDraft && quoteDraft.currentState.length > 0);
|
396
|
+
}
|
397
|
+
reset() {
|
398
|
+
this.resetSubj$.next(true);
|
399
|
+
this.quoteSubj$.next(null);
|
400
|
+
this.hasUnsavedChanges = false;
|
401
|
+
}
|
402
|
+
init(quoteId, params) {
|
403
|
+
return zip(this.quoteApiService.getQuoteDraft(quoteId, params), this.priceApiService.getPriceLists()).pipe(tap(([quote, allPriceLists]) => {
|
404
|
+
this.allPriceLists = allPriceLists;
|
405
|
+
this.quoteSubj$.next(quote);
|
406
|
+
this.context.update(quote.context);
|
407
|
+
this.populateActivePriceLists$();
|
408
|
+
}), map(() => noop()), take(1));
|
409
|
+
}
|
410
|
+
setCurrentLineItemState(lineItems) {
|
411
|
+
const quoteDraft = this.quoteSubj$.value;
|
412
|
+
if (!quoteDraft) {
|
413
|
+
return;
|
414
|
+
}
|
415
|
+
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), { currentState: lineItems }));
|
416
|
+
}
|
417
|
+
updateQuoteDraft(update) {
|
418
|
+
const quoteDraft = this.quoteSubj$.value;
|
419
|
+
if (!quoteDraft) {
|
420
|
+
return;
|
421
|
+
}
|
422
|
+
if (update.context) {
|
423
|
+
this.context.set(update.context);
|
424
|
+
}
|
425
|
+
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), update));
|
426
|
+
}
|
427
|
+
updateByPriceSummary(priceSummary) {
|
428
|
+
const quoteDraft = this.quoteSubj$.value;
|
429
|
+
if (!quoteDraft) {
|
430
|
+
return;
|
431
|
+
}
|
432
|
+
const updatedCurrentState = this.currentState.map(lineItem => {
|
433
|
+
const updated = priceSummary.lineItems.find(li => li.id === lineItem.id);
|
434
|
+
return updated !== null && updated !== void 0 ? updated : lineItem;
|
435
|
+
});
|
436
|
+
this.quoteSubj$.next(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedCurrentState, totalPrices: priceSummary.totalPrices, approvalItems: priceSummary.approvalItems }));
|
437
|
+
}
|
438
|
+
get quoteDraft$() {
|
439
|
+
return combineLatest([this.quoteSubj$, this.context.resolve$()]).pipe(map(() => this.quoteDraft), filter((quote) => Boolean(quote)), shareReplay());
|
440
|
+
}
|
441
|
+
get quoteDraft() {
|
442
|
+
const quote = this.quoteSubj$.value;
|
443
|
+
if (!quote) {
|
444
|
+
return null;
|
445
|
+
}
|
446
|
+
return Object.assign(Object.assign({}, quote), { context: this.context.resolve() });
|
447
|
+
}
|
448
|
+
get quoteDraftForActivePriceList() {
|
449
|
+
const quoteDraft = this.quoteDraft;
|
450
|
+
if (!quoteDraft) {
|
451
|
+
return null;
|
452
|
+
}
|
453
|
+
return Object.assign(Object.assign({}, quoteDraft), { initialState: this.filterByActivePriceList(quoteDraft.initialState), currentState: this.filterByActivePriceList(quoteDraft.currentState) });
|
454
|
+
}
|
455
|
+
get currentState$() {
|
456
|
+
return this.quoteDraft$.pipe(map(quote => quote.currentState));
|
457
|
+
}
|
458
|
+
get currentState() {
|
459
|
+
var _a, _b;
|
460
|
+
return (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
|
461
|
+
}
|
462
|
+
/**
|
463
|
+
* Stream of activeCurrentState
|
464
|
+
*/
|
465
|
+
get activeCurrentState$() {
|
466
|
+
return this.quoteDraft$.pipe(map(() => this.activeCurrentState));
|
467
|
+
}
|
468
|
+
/**
|
469
|
+
* activeCurrentState is currentState passed through additional filters
|
470
|
+
*/
|
471
|
+
get activeCurrentState() {
|
472
|
+
var _a, _b;
|
473
|
+
let currentState = (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.currentState) !== null && _b !== void 0 ? _b : [];
|
474
|
+
currentState = this.filterByActivePriceList(currentState);
|
475
|
+
return currentState;
|
476
|
+
}
|
477
|
+
/**
|
478
|
+
* Stream of activeInitialState
|
479
|
+
*/
|
480
|
+
get activeInitialState$() {
|
481
|
+
return this.quoteDraft$.pipe(map(() => this.activeInitialState));
|
482
|
+
}
|
483
|
+
/**
|
484
|
+
* activeInitialState is initialState passed through additional filters
|
485
|
+
*/
|
486
|
+
get activeInitialState() {
|
487
|
+
var _a, _b;
|
488
|
+
const ctx = this.context.resolve();
|
489
|
+
let initialState = (_b = (_a = this.quoteDraft) === null || _a === void 0 ? void 0 : _a.initialState) !== null && _b !== void 0 ? _b : [];
|
490
|
+
if (ctx.mode === ConfigurationContextMode.ACCOUNT) {
|
491
|
+
initialState = this.filterByActivePriceList(initialState);
|
492
|
+
}
|
493
|
+
return initialState;
|
494
|
+
}
|
495
|
+
get isStandalone() {
|
496
|
+
return this.context.resolve().properties.standalone === 'true';
|
655
497
|
}
|
656
|
-
|
657
|
-
return
|
658
|
-
Object.assign(Object.assign({}, lineItem), { qty: qty }),
|
659
|
-
];
|
498
|
+
get isStandalone$() {
|
499
|
+
return this.context.resolve$().pipe(map(() => this.isStandalone));
|
660
500
|
}
|
661
|
-
|
662
|
-
|
663
|
-
var lineItem_utils = /*#__PURE__*/Object.freeze({
|
664
|
-
__proto__: null,
|
665
|
-
findLineItem: findLineItem,
|
666
|
-
findLineItemWithComparator: findLineItemWithComparator,
|
667
|
-
insertLineItem: insertLineItem,
|
668
|
-
removeLineItem: removeLineItem,
|
669
|
-
replaceLineItem: replaceLineItem,
|
670
|
-
mapAttributes: mapAttributes,
|
671
|
-
getAttributes: getAttributes,
|
672
|
-
upsertAttributes: upsertAttributes,
|
673
|
-
patchAttributes: patchAttributes,
|
674
|
-
getAttributeValue: getAttributeValue,
|
675
|
-
generateLineItem: generateLineItem,
|
676
|
-
getRecommendedPrices: getRecommendedPrices,
|
677
|
-
multiplyLineItems: multiplyLineItems
|
678
|
-
});
|
679
|
-
|
680
|
-
class LineItemWorker {
|
681
|
-
constructor(src) {
|
682
|
-
this.li = Object.assign({}, src);
|
501
|
+
getInitialCurrentState() {
|
502
|
+
return this.initialCurrentState;
|
683
503
|
}
|
684
|
-
|
685
|
-
return
|
504
|
+
isEditMode$() {
|
505
|
+
return this.context.resolve$().pipe(map(() => this.isEditMode()));
|
686
506
|
}
|
687
|
-
|
688
|
-
|
507
|
+
isEditMode() {
|
508
|
+
const context = this.context.resolve();
|
509
|
+
if (context.mode === ConfigurationContextMode.ACCOUNT) {
|
510
|
+
return true;
|
511
|
+
}
|
512
|
+
if (context.mode === ConfigurationContextMode.QUOTE) {
|
513
|
+
return context.properties.Status === 'Draft';
|
514
|
+
}
|
515
|
+
return false;
|
689
516
|
}
|
690
|
-
|
691
|
-
|
517
|
+
updateActivePriceList(priceListId) {
|
518
|
+
this.context.update({ properties: { PriceListId: priceListId } });
|
692
519
|
}
|
693
|
-
|
694
|
-
|
520
|
+
populateActivePriceLists$() {
|
521
|
+
const ctx = this.context.resolve();
|
522
|
+
const quoteDraft = this.quoteDraft;
|
523
|
+
if (!quoteDraft) {
|
524
|
+
return;
|
525
|
+
}
|
526
|
+
// In ACCOUNT mode populate price lists from related assets
|
527
|
+
if (ctx.mode === ConfigurationContextMode.ACCOUNT) {
|
528
|
+
// Populate list of price lists
|
529
|
+
this.assetPriceLists = quoteDraft.currentState
|
530
|
+
.map(({ priceListId }) => priceListId)
|
531
|
+
.reduce((trunk, priceListId) => {
|
532
|
+
var _a, _b;
|
533
|
+
if (!priceListId || trunk.some(item => item.id === priceListId)) {
|
534
|
+
return trunk;
|
535
|
+
}
|
536
|
+
return [
|
537
|
+
...trunk,
|
538
|
+
{ id: priceListId, name: (_b = (_a = this.allPriceLists.find(item => item.id === priceListId)) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '' },
|
539
|
+
];
|
540
|
+
}, []);
|
541
|
+
}
|
542
|
+
}
|
543
|
+
filterByActivePriceList(lineItems) {
|
544
|
+
const ctx = this.context.resolve();
|
545
|
+
return lineItems.filter(li => !li.priceListId || li.priceListId === ctx.properties.PriceListId);
|
546
|
+
}
|
547
|
+
markAsUpdated(quote) {
|
548
|
+
if ((quote === null || quote === void 0 ? void 0 : quote.context.properties.mode) === ConfigurationContextMode.ACCOUNT) {
|
549
|
+
this.hasUnsavedChanges = !!quote && !quote.currentState.every(li => li.actionCode === 'EXIST');
|
550
|
+
}
|
551
|
+
else {
|
552
|
+
this.hasUnsavedChanges = !isEqual(this.initialCurrentState, quote === null || quote === void 0 ? void 0 : quote.currentState);
|
553
|
+
}
|
695
554
|
}
|
696
555
|
}
|
556
|
+
QuoteDraftService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuoteDraftService, deps: [{ token: ContextService }, { token: i1.QuoteApiService }, { token: i1.PriceApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
557
|
+
QuoteDraftService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuoteDraftService, providedIn: 'root' });
|
558
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: QuoteDraftService, decorators: [{
|
559
|
+
type: Injectable,
|
560
|
+
args: [{ providedIn: 'root' }]
|
561
|
+
}], ctorParameters: function () { return [{ type: ContextService }, { type: i1.QuoteApiService }, { type: i1.PriceApiService }]; } });
|
697
562
|
|
698
563
|
class ConfigurationService {
|
699
564
|
constructor(quoteDraftService, runtimeService, contextService, configurationApiService, messageService, dialogService) {
|
@@ -726,7 +591,7 @@ class ConfigurationService {
|
|
726
591
|
this.states.asset = this.states.configurableRamp
|
727
592
|
? this.runtimeService.getAsset(this.states.configurableRamp)
|
728
593
|
: undefined;
|
729
|
-
return this.configure().pipe(catchError
|
594
|
+
return this.configure().pipe(catchError(error => {
|
730
595
|
console.error(error);
|
731
596
|
if (!this.runtimeService.uiDefinitionProperties.suppressToastMessages) {
|
732
597
|
this.messageService.add({ severity: 'error', summary: error });
|
@@ -800,13 +665,13 @@ class ConfigurationService {
|
|
800
665
|
}
|
801
666
|
return lineItem;
|
802
667
|
}))
|
803
|
-
.pipe(tap(lineItem => lineItem && this.lineItem.next(lineItem)), catchError
|
668
|
+
.pipe(tap(lineItem => lineItem && this.lineItem.next(lineItem)), catchError(error => throwError(() => { var _a; return new Error(((_a = error.error) === null || _a === void 0 ? void 0 : _a.message) || error.message || JSON.stringify(error)); })));
|
804
669
|
}
|
805
670
|
configureExternal$(productId, qty) {
|
806
671
|
this.updateCurrentStates({
|
807
672
|
currentState: this.quoteDraftService.currentState,
|
808
673
|
});
|
809
|
-
return this.runtimeService.init({ productId, defaultQty: qty }).pipe(switchMap(() => this.configure()), first(), catchError
|
674
|
+
return this.runtimeService.init({ productId, defaultQty: qty }).pipe(switchMap(() => this.configure()), first(), catchError(error => {
|
810
675
|
this.messageService.add({ severity: ToastType.error, summary: error });
|
811
676
|
throw error;
|
812
677
|
}), finalize(() => this.reset()));
|
@@ -848,11 +713,11 @@ class ConfigurationService {
|
|
848
713
|
});
|
849
714
|
}
|
850
715
|
}
|
851
|
-
ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
852
|
-
ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.
|
853
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
716
|
+
ConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationService, deps: [{ token: QuoteDraftService }, { token: ConfigurationRuntimeService }, { token: ContextService }, { token: i1.ConfigurationApiService }, { token: i5.MessageService }, { token: i6.DialogService }], target: i0.ɵɵFactoryTarget.Injectable });
|
717
|
+
ConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationService });
|
718
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationService, decorators: [{
|
854
719
|
type: Injectable
|
855
|
-
}], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: ConfigurationRuntimeService }, { type: ContextService }, { type: i1.ConfigurationApiService }, { type:
|
720
|
+
}], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: ConfigurationRuntimeService }, { type: ContextService }, { type: i1.ConfigurationApiService }, { type: i5.MessageService }, { type: i6.DialogService }]; } });
|
856
721
|
|
857
722
|
class FlowUpdateService {
|
858
723
|
update(rootLineItems, updates) {
|
@@ -971,9 +836,9 @@ class FlowUpdateService {
|
|
971
836
|
return true;
|
972
837
|
}
|
973
838
|
}
|
974
|
-
FlowUpdateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
975
|
-
FlowUpdateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.
|
976
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
839
|
+
FlowUpdateService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowUpdateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
840
|
+
FlowUpdateService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowUpdateService });
|
841
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowUpdateService, decorators: [{
|
977
842
|
type: Injectable
|
978
843
|
}] });
|
979
844
|
|
@@ -993,7 +858,7 @@ class FlowConfigurationService {
|
|
993
858
|
.slice()
|
994
859
|
.sort((a, b) => initialStateIds.indexOf(a.integrationId) - initialStateIds.indexOf(b.integrationId));
|
995
860
|
this.quoteDraftService.updateQuoteDraft(result);
|
996
|
-
}), map$
|
861
|
+
}), map$2(noop));
|
997
862
|
}
|
998
863
|
calculate(quoteDraft) {
|
999
864
|
this.calculate$(quoteDraft).subscribe();
|
@@ -1003,11 +868,11 @@ class FlowConfigurationService {
|
|
1003
868
|
if (!quoteDraft) {
|
1004
869
|
return of(null);
|
1005
870
|
}
|
1006
|
-
return of([]).pipe(map$
|
871
|
+
return of([]).pipe(map$2(() => {
|
1007
872
|
const updatedState = cloneDeep(quoteDraft.currentState);
|
1008
873
|
this.updateService.update(updatedState, updates);
|
1009
874
|
return updatedState;
|
1010
|
-
}), switchMap$1(updatedState => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$
|
875
|
+
}), switchMap$1(updatedState => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$2(() => this.quoteDraftService.quoteDraft), this.handleErrorAndBounceBack());
|
1011
876
|
}
|
1012
877
|
update(updates) {
|
1013
878
|
this.update$(updates).subscribe();
|
@@ -1026,7 +891,7 @@ class FlowConfigurationService {
|
|
1026
891
|
updatedState.splice(currentLineItemIndex, 1, initialLineItem);
|
1027
892
|
return of([]).pipe(tap$1(() => {
|
1028
893
|
this.quoteDraftService.setCurrentLineItemState(updatedState);
|
1029
|
-
}), switchMap$1(() => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$
|
894
|
+
}), switchMap$1(() => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$2(() => this.quoteDraftService.quoteDraft), this.handleErrorAndBounceBack());
|
1030
895
|
}
|
1031
896
|
revert(lineItemId) {
|
1032
897
|
this.revert$(lineItemId).subscribe();
|
@@ -1037,7 +902,7 @@ class FlowConfigurationService {
|
|
1037
902
|
if (!quoteDraft) {
|
1038
903
|
return of(null);
|
1039
904
|
}
|
1040
|
-
return of([]).pipe(map$
|
905
|
+
return of([]).pipe(map$2(() => ids.reduce((result, id) => this.updateService.delete(result, id), currentState)), switchMap$1(updatedState => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$2(() => this.quoteDraftService.quoteDraft), this.handleErrorAndBounceBack());
|
1041
906
|
}
|
1042
907
|
delete(ids) {
|
1043
908
|
this.delete$(ids).subscribe();
|
@@ -1048,33 +913,33 @@ class FlowConfigurationService {
|
|
1048
913
|
return of(null);
|
1049
914
|
}
|
1050
915
|
const updatedState = [...quoteDraft.currentState, term];
|
1051
|
-
return of([]).pipe(switchMap$1(() => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$
|
916
|
+
return of([]).pipe(switchMap$1(() => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$2(() => this.quoteDraftService.quoteDraft), this.handleErrorAndBounceBack());
|
1052
917
|
}
|
1053
918
|
addToCart$(productId, qty) {
|
1054
919
|
const quoteDraft = this.quoteDraftService.quoteDraft;
|
1055
920
|
if (!quoteDraft) {
|
1056
921
|
return of(null);
|
1057
922
|
}
|
1058
|
-
return this.configurationService.configureExternal$(productId, qty).pipe(map$
|
923
|
+
return this.configurationService.configureExternal$(productId, qty).pipe(map$2(lineItem => {
|
1059
924
|
var _a, _b;
|
1060
925
|
const model = this.configurationService.getRuntimeModel();
|
1061
926
|
const split = (_b = (_a = model === null || model === void 0 ? void 0 : model.types.find(type => type.name === lineItem.type)) === null || _a === void 0 ? void 0 : _a.split) !== null && _b !== void 0 ? _b : false;
|
1062
927
|
const lineItems = multiplyLineItems(lineItem, qty !== null && qty !== void 0 ? qty : 1, split);
|
1063
928
|
return [...quoteDraft.currentState, ...lineItems];
|
1064
|
-
}), switchMap$1(updatedState => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$
|
929
|
+
}), switchMap$1(updatedState => this.calculate$(Object.assign(Object.assign({}, quoteDraft), { currentState: updatedState }))), map$2(() => this.quoteDraftService.quoteDraft), this.handleErrorAndBounceBack());
|
1065
930
|
}
|
1066
931
|
get() {
|
1067
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$
|
932
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$2(() => this.quoteDraftService.activeCurrentState), shareReplay$1());
|
1068
933
|
}
|
1069
934
|
getSnapshot() {
|
1070
935
|
var _a, _b;
|
1071
936
|
return (_b = (_a = this.quoteDraftService) === null || _a === void 0 ? void 0 : _a.currentState.slice()) !== null && _b !== void 0 ? _b : [];
|
1072
937
|
}
|
1073
938
|
get charges$() {
|
1074
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$
|
939
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$2(({ charges }) => charges));
|
1075
940
|
}
|
1076
941
|
get pricePlans$() {
|
1077
|
-
return this.quoteDraftService.quoteDraft$.pipe(map$
|
942
|
+
return this.quoteDraftService.quoteDraft$.pipe(map$2(({ pricePlans }) => pricePlans));
|
1078
943
|
}
|
1079
944
|
get chargesSnapshot() {
|
1080
945
|
var _a, _b;
|
@@ -1092,7 +957,7 @@ class FlowConfigurationService {
|
|
1092
957
|
}
|
1093
958
|
handleErrorAndBounceBack() {
|
1094
959
|
return (source$) => {
|
1095
|
-
return source$.pipe(catchError(error => {
|
960
|
+
return source$.pipe(catchError$1(error => {
|
1096
961
|
console.error(error);
|
1097
962
|
// bounce back if configuration call has failed
|
1098
963
|
const quoteDraft = this.quoteDraftService.quoteDraft;
|
@@ -1104,18 +969,18 @@ class FlowConfigurationService {
|
|
1104
969
|
};
|
1105
970
|
}
|
1106
971
|
}
|
1107
|
-
FlowConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
1108
|
-
FlowConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.
|
1109
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
972
|
+
FlowConfigurationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowConfigurationService, deps: [{ token: i1.ProceduresApiService }, { token: ContextService }, { token: QuoteDraftService }, { token: FlowUpdateService }, { token: ConfigurationService }], target: i0.ɵɵFactoryTarget.Injectable });
|
973
|
+
FlowConfigurationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowConfigurationService });
|
974
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowConfigurationService, decorators: [{
|
1110
975
|
type: Injectable
|
1111
976
|
}], ctorParameters: function () { return [{ type: i1.ProceduresApiService }, { type: ContextService }, { type: QuoteDraftService }, { type: FlowUpdateService }, { type: ConfigurationService }]; } });
|
1112
977
|
|
1113
978
|
class FlowConfigurationModule {
|
1114
979
|
}
|
1115
|
-
FlowConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
1116
|
-
FlowConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.
|
1117
|
-
FlowConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.
|
1118
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
980
|
+
FlowConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
981
|
+
FlowConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowConfigurationModule });
|
982
|
+
FlowConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowConfigurationModule, providers: [FlowConfigurationService, FlowUpdateService, PriceApiService], imports: [[]] });
|
983
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FlowConfigurationModule, decorators: [{
|
1119
984
|
type: NgModule,
|
1120
985
|
args: [{
|
1121
986
|
imports: [],
|
@@ -1125,9 +990,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
|
|
1125
990
|
|
1126
991
|
class ConfigurationModule {
|
1127
992
|
}
|
1128
|
-
ConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
1129
|
-
ConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.
|
1130
|
-
ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.
|
993
|
+
ConfigurationModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
994
|
+
ConfigurationModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationModule, imports: [ConfirmationDialogModule] });
|
995
|
+
ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationModule, providers: [
|
1131
996
|
ContextApiService,
|
1132
997
|
ProductModelApiService,
|
1133
998
|
ConfigurationApiService,
|
@@ -1135,7 +1000,7 @@ ConfigurationModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", ver
|
|
1135
1000
|
RuntimeContextService,
|
1136
1001
|
ConfigurationService,
|
1137
1002
|
], imports: [[ConfirmationDialogModule]] });
|
1138
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
1003
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ConfigurationModule, decorators: [{
|
1139
1004
|
type: NgModule,
|
1140
1005
|
args: [{
|
1141
1006
|
imports: [ConfirmationDialogModule],
|
@@ -1150,12 +1015,147 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImpo
|
|
1150
1015
|
}]
|
1151
1016
|
}] });
|
1152
1017
|
|
1018
|
+
function calculateMetricByMethod(lineItems, metric, method) {
|
1019
|
+
const items = getLineItemsByMethod(lineItems, method);
|
1020
|
+
return items.reduce((acc, li) => {
|
1021
|
+
let value = li.reduce((accProduct, item) => accProduct + ((item.totalMetrics && item.totalMetrics[metric]) || 0), 0);
|
1022
|
+
if (method === 'avg' && li.length > 0) {
|
1023
|
+
value /= li.length;
|
1024
|
+
}
|
1025
|
+
return acc + value;
|
1026
|
+
}, 0);
|
1027
|
+
}
|
1028
|
+
function getLineItemsByMethod(lineItems, method) {
|
1029
|
+
switch (method) {
|
1030
|
+
case 'first': {
|
1031
|
+
return lineItems.filter(li => !li.rampInstanceId).map(item => [item]);
|
1032
|
+
}
|
1033
|
+
case 'last': {
|
1034
|
+
const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
|
1035
|
+
const products = rootTermItems.map(lineItem => [
|
1036
|
+
lineItem,
|
1037
|
+
...lineItems.filter(li => li.rampInstanceId === lineItem.id),
|
1038
|
+
]);
|
1039
|
+
return products
|
1040
|
+
.map(items => [...items].sort((a, b) => getDateValue(a.endDate || '') - getDateValue(b.endDate || '')).pop())
|
1041
|
+
.filter((li) => Boolean(li))
|
1042
|
+
.map(item => [item]);
|
1043
|
+
}
|
1044
|
+
case 'avg': {
|
1045
|
+
const rootTermItems = lineItems.filter(li => !li.rampInstanceId);
|
1046
|
+
return rootTermItems.map(lineItem => [lineItem, ...lineItems.filter(li => li.rampInstanceId === lineItem.id)]);
|
1047
|
+
}
|
1048
|
+
case 'sum': {
|
1049
|
+
return lineItems.map(item => [item]);
|
1050
|
+
}
|
1051
|
+
default: {
|
1052
|
+
return lineItems.map(item => [item]);
|
1053
|
+
}
|
1054
|
+
}
|
1055
|
+
}
|
1056
|
+
function getDateValue(date) {
|
1057
|
+
return date ? new Date(date).getTime() : 0;
|
1058
|
+
}
|
1059
|
+
|
1060
|
+
class MetricsCalculationService {
|
1061
|
+
constructor(quoteDraftService, settingsService) {
|
1062
|
+
this.quoteDraftService = quoteDraftService;
|
1063
|
+
this.settingsService = settingsService;
|
1064
|
+
this.metricsUpdated$ = new Subject();
|
1065
|
+
this.quoteMetricsSettings = {};
|
1066
|
+
this.metricsCalculationMethodMap = {};
|
1067
|
+
this.metricsData = {};
|
1068
|
+
combineLatest([
|
1069
|
+
this.quoteDraftService.currentState$,
|
1070
|
+
this.settingsService.fetchSetting('QUOTE_LEVEL_METRIC_CALCULATION_METHOD').pipe(take$1(1)),
|
1071
|
+
]).subscribe(([lineItems, setting]) => {
|
1072
|
+
let settingsData = {};
|
1073
|
+
try {
|
1074
|
+
settingsData = JSON.parse((setting === null || setting === void 0 ? void 0 : setting.value) || '{}');
|
1075
|
+
}
|
1076
|
+
catch (error) {
|
1077
|
+
settingsData = {};
|
1078
|
+
}
|
1079
|
+
this.quoteMetricsSettings = settingsData;
|
1080
|
+
this.updateMetrics(lineItems);
|
1081
|
+
});
|
1082
|
+
}
|
1083
|
+
get onMetricsUpdate$() {
|
1084
|
+
return this.metricsUpdated$.asObservable();
|
1085
|
+
}
|
1086
|
+
getMetricValue(metric) {
|
1087
|
+
return this.metricsData[metric] || 0;
|
1088
|
+
}
|
1089
|
+
updateMetrics(lineItems) {
|
1090
|
+
const metricKeys = this.collectMetricKeys(lineItems).filter(key => !key.includes('Effective_'));
|
1091
|
+
this.metricsCalculationMethodMap = this.buildMetricsCalculationMethods(metricKeys, this.metricsCalculationMethodMap);
|
1092
|
+
this.metricsData = metricKeys.reduce((acc, key) => (Object.assign(Object.assign({}, acc), { [key]: this.calculateMetric(lineItems, key) })), {});
|
1093
|
+
this.metricsUpdated$.next();
|
1094
|
+
}
|
1095
|
+
calculateMetric(lineItems, metric) {
|
1096
|
+
return calculateMetricByMethod(lineItems, metric, this.metricsCalculationMethodMap[metric] || 'sum');
|
1097
|
+
}
|
1098
|
+
buildMetricsCalculationMethods(metricKeys, initial) {
|
1099
|
+
return metricKeys.reduce((acc, name) => {
|
1100
|
+
if (acc[name]) {
|
1101
|
+
return acc;
|
1102
|
+
}
|
1103
|
+
acc = Object.assign(Object.assign({}, acc), { [name]: 'sum' });
|
1104
|
+
const settingKey = name.replace(/VDM_|Total_/g, '');
|
1105
|
+
if (this.quoteMetricsSettings[settingKey]) {
|
1106
|
+
acc = Object.assign(Object.assign({}, acc), { [name]: this.quoteMetricsSettings[settingKey] });
|
1107
|
+
}
|
1108
|
+
return acc;
|
1109
|
+
}, initial);
|
1110
|
+
}
|
1111
|
+
collectMetricKeys(lineItems) {
|
1112
|
+
const keys = [];
|
1113
|
+
lineItems.forEach(lineItem => {
|
1114
|
+
keys.push(...Object.keys(lineItem.totalMetrics || {}));
|
1115
|
+
keys.push(...this.collectMetricKeys(lineItem.lineItems));
|
1116
|
+
});
|
1117
|
+
return uniq(keys);
|
1118
|
+
}
|
1119
|
+
}
|
1120
|
+
MetricsCalculationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MetricsCalculationService, deps: [{ token: QuoteDraftService }, { token: i1.ConfigurationSettingsApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
1121
|
+
MetricsCalculationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MetricsCalculationService, providedIn: 'root' });
|
1122
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: MetricsCalculationService, decorators: [{
|
1123
|
+
type: Injectable,
|
1124
|
+
args: [{ providedIn: 'root' }]
|
1125
|
+
}], ctorParameters: function () { return [{ type: QuoteDraftService }, { type: i1.ConfigurationSettingsApiService }]; } });
|
1126
|
+
|
1127
|
+
class ProductImagesService {
|
1128
|
+
constructor(productApiService) {
|
1129
|
+
this.productApiService = productApiService;
|
1130
|
+
this.imagesMap$ = new BehaviorSubject({});
|
1131
|
+
}
|
1132
|
+
getImageUrl$(productId) {
|
1133
|
+
if (this.imagesMap$.value[productId] == null) {
|
1134
|
+
this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: '' }));
|
1135
|
+
this.fetchProductImage(productId);
|
1136
|
+
}
|
1137
|
+
return this.imagesMap$.pipe(map$2(imagesMap => imagesMap[productId]), distinctUntilChanged());
|
1138
|
+
}
|
1139
|
+
fetchProductImage(productId) {
|
1140
|
+
this.productApiService
|
1141
|
+
.fetchImage$(productId)
|
1142
|
+
.pipe(map$2(file => URL.createObjectURL(file)), catchError$1(() => of('')), tap$1(url => this.imagesMap$.next(Object.assign(Object.assign({}, this.imagesMap$.value), { [productId]: url }))))
|
1143
|
+
.subscribe();
|
1144
|
+
}
|
1145
|
+
}
|
1146
|
+
ProductImagesService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductImagesService, deps: [{ token: i1.ProductApiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
1147
|
+
ProductImagesService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductImagesService, providedIn: 'root' });
|
1148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: ProductImagesService, decorators: [{
|
1149
|
+
type: Injectable,
|
1150
|
+
args: [{ providedIn: 'root' }]
|
1151
|
+
}], ctorParameters: function () { return [{ type: i1.ProductApiService }]; } });
|
1152
|
+
|
1153
1153
|
class SdkCoreModule {
|
1154
1154
|
}
|
1155
|
-
SdkCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.
|
1156
|
-
SdkCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.
|
1157
|
-
SdkCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.
|
1158
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.
|
1155
|
+
SdkCoreModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SdkCoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
1156
|
+
SdkCoreModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SdkCoreModule, imports: [ConfigurationModule, FlowConfigurationModule] });
|
1157
|
+
SdkCoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SdkCoreModule, providers: [ContextService, QuoteDraftService, ProductImagesService, MetricsCalculationService], imports: [[ConfigurationModule, FlowConfigurationModule]] });
|
1158
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SdkCoreModule, decorators: [{
|
1159
1159
|
type: NgModule,
|
1160
1160
|
args: [{
|
1161
1161
|
imports: [ConfigurationModule, FlowConfigurationModule],
|