@unchainedshop/core-quotations 2.0.0-beta8 → 2.0.0-beta9
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/jest.config.js +9 -0
- package/lib/director/QuotationDirector.js +5 -5
- package/lib/director/QuotationDirector.js.map +1 -1
- package/lib/module/configureQuotationsModule.d.ts +5 -1
- package/lib/module/configureQuotationsModule.js +50 -48
- package/lib/module/configureQuotationsModule.js.map +1 -1
- package/package.json +10 -9
- package/src/director/QuotationDirector.ts +6 -6
- package/src/module/configureQuotationsModule.ts +82 -109
- package/tests/quotations-index.test.ts +15 -67
package/jest.config.js
CHANGED
|
@@ -4,9 +4,9 @@ import { QuotationError } from './QuotationError';
|
|
|
4
4
|
const baseDirector = BaseDirector('QuotationDirector', {
|
|
5
5
|
adapterSortKey: 'orderIndex',
|
|
6
6
|
});
|
|
7
|
-
const findAppropriateAdapters = (quotationContext,
|
|
7
|
+
const findAppropriateAdapters = (quotationContext, unchainedAPI) => baseDirector.getAdapters({
|
|
8
8
|
adapterFilter: (Adapter) => {
|
|
9
|
-
const activated = Adapter.isActivatedFor(quotationContext,
|
|
9
|
+
const activated = Adapter.isActivatedFor(quotationContext, unchainedAPI);
|
|
10
10
|
if (!activated) {
|
|
11
11
|
log(`Quotation Director -> ${Adapter.key} (${Adapter.version}) skipped`, {
|
|
12
12
|
level: LogLevel.Warning,
|
|
@@ -17,9 +17,9 @@ const findAppropriateAdapters = (quotationContext, requestContext) => baseDirect
|
|
|
17
17
|
});
|
|
18
18
|
export const QuotationDirector = {
|
|
19
19
|
...baseDirector,
|
|
20
|
-
actions: async (quotationContext,
|
|
21
|
-
const context = { ...quotationContext, ...
|
|
22
|
-
const Adapter = findAppropriateAdapters(quotationContext,
|
|
20
|
+
actions: async (quotationContext, unchainedAPI) => {
|
|
21
|
+
const context = { ...quotationContext, ...unchainedAPI };
|
|
22
|
+
const Adapter = findAppropriateAdapters(quotationContext, unchainedAPI)?.shift();
|
|
23
23
|
if (!Adapter) {
|
|
24
24
|
throw new Error('No suitable quotation plugin available for this context');
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuotationDirector.js","sourceRoot":"","sources":["../../src/director/QuotationDirector.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"QuotationDirector.js","sourceRoot":"","sources":["../../src/director/QuotationDirector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
1
|
import { ModuleInput } from '@unchainedshop/types/core';
|
|
2
|
-
import { QuotationsModule, QuotationsSettingsOptions } from '@unchainedshop/types/quotations';
|
|
2
|
+
import { QuotationQuery, QuotationsModule, QuotationsSettingsOptions } from '@unchainedshop/types/quotations';
|
|
3
|
+
export declare const buildFindSelector: (query?: QuotationQuery) => {
|
|
4
|
+
userId?: string;
|
|
5
|
+
$text?: any;
|
|
6
|
+
};
|
|
3
7
|
export declare const configureQuotationsModule: ({ db, options: quotationsOptions, }: ModuleInput<QuotationsSettingsOptions>) => Promise<QuotationsModule>;
|
|
@@ -8,7 +8,7 @@ import { QuotationStatus } from '../db/QuotationStatus';
|
|
|
8
8
|
import { QuotationDirector } from '../quotations-index';
|
|
9
9
|
import { quotationsSettings } from '../quotations-settings';
|
|
10
10
|
const QUOTATION_EVENTS = ['QUOTATION_REQUEST_CREATE', 'QUOTATION_REMOVE', 'QUOTATION_UPDATE'];
|
|
11
|
-
const buildFindSelector = (query = {}) => {
|
|
11
|
+
export const buildFindSelector = (query = {}) => {
|
|
12
12
|
const selector = {};
|
|
13
13
|
if (query.userId) {
|
|
14
14
|
selector.userId = query.userId;
|
|
@@ -41,9 +41,9 @@ export const configureQuotationsModule = async ({ db, options: quotationsOptions
|
|
|
41
41
|
// }
|
|
42
42
|
// return quotationNumber;
|
|
43
43
|
};
|
|
44
|
-
const findNextStatus = async (quotation,
|
|
44
|
+
const findNextStatus = async (quotation, unchainedAPI) => {
|
|
45
45
|
let status = quotation.status;
|
|
46
|
-
const director = await QuotationDirector.actions({ quotation },
|
|
46
|
+
const director = await QuotationDirector.actions({ quotation }, unchainedAPI);
|
|
47
47
|
if (status === QuotationStatus.REQUESTED) {
|
|
48
48
|
if (!(await director.isManualRequestVerificationRequired())) {
|
|
49
49
|
status = QuotationStatus.PROCESSING;
|
|
@@ -56,7 +56,7 @@ export const configureQuotationsModule = async ({ db, options: quotationsOptions
|
|
|
56
56
|
}
|
|
57
57
|
return status;
|
|
58
58
|
};
|
|
59
|
-
const updateStatus = async (quotationId, { status, info = '' }
|
|
59
|
+
const updateStatus = async (quotationId, { status, info = '' }) => {
|
|
60
60
|
const selector = generateDbFilterById(quotationId);
|
|
61
61
|
const quotation = await Quotations.findOne(selector, {});
|
|
62
62
|
if (quotation.status === status)
|
|
@@ -65,7 +65,6 @@ export const configureQuotationsModule = async ({ db, options: quotationsOptions
|
|
|
65
65
|
const $set = {
|
|
66
66
|
status,
|
|
67
67
|
updated: new Date(),
|
|
68
|
-
updatedBy: userId,
|
|
69
68
|
};
|
|
70
69
|
switch (status) {
|
|
71
70
|
// explicitly use fallthrough here!
|
|
@@ -102,38 +101,38 @@ export const configureQuotationsModule = async ({ db, options: quotationsOptions
|
|
|
102
101
|
await emit('QUOTATION_UPDATE', { quotation, field: 'status' });
|
|
103
102
|
return updatedQuotation;
|
|
104
103
|
};
|
|
105
|
-
const processQuotation = async (initialQuotation, params,
|
|
106
|
-
const { modules
|
|
104
|
+
const processQuotation = async (initialQuotation, params, unchainedAPI) => {
|
|
105
|
+
const { modules } = unchainedAPI;
|
|
107
106
|
const quotationId = initialQuotation._id;
|
|
108
107
|
let quotation = initialQuotation;
|
|
109
|
-
let nextStatus = await findNextStatus(quotation,
|
|
110
|
-
const director = await QuotationDirector.actions({ quotation },
|
|
108
|
+
let nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
109
|
+
const director = await QuotationDirector.actions({ quotation }, unchainedAPI);
|
|
111
110
|
if (quotation.status === QuotationStatus.REQUESTED && nextStatus !== QuotationStatus.REQUESTED) {
|
|
112
111
|
await director.submitRequest(params.quotationContext);
|
|
113
112
|
}
|
|
114
113
|
quotation = await modules.quotations.findQuotation({ quotationId });
|
|
115
|
-
nextStatus = await findNextStatus(quotation,
|
|
114
|
+
nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
116
115
|
if (nextStatus !== QuotationStatus.PROCESSING) {
|
|
117
116
|
await director.verifyRequest(params.quotationContext);
|
|
118
117
|
}
|
|
119
118
|
quotation = await modules.quotations.findQuotation({ quotationId });
|
|
120
|
-
nextStatus = await findNextStatus(quotation,
|
|
119
|
+
nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
121
120
|
if (nextStatus === QuotationStatus.REJECTED) {
|
|
122
121
|
await director.rejectRequest(params.quotationContext);
|
|
123
122
|
}
|
|
124
123
|
quotation = await modules.quotations.findQuotation({ quotationId });
|
|
125
|
-
nextStatus = await findNextStatus(quotation,
|
|
124
|
+
nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
126
125
|
if (nextStatus === QuotationStatus.PROPOSED) {
|
|
127
126
|
const proposal = await director.quote();
|
|
128
|
-
quotation = await modules.quotations.updateProposal(quotation._id, proposal
|
|
129
|
-
nextStatus = await findNextStatus(quotation,
|
|
127
|
+
quotation = await modules.quotations.updateProposal(quotation._id, proposal);
|
|
128
|
+
nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
130
129
|
}
|
|
131
|
-
return updateStatus(quotation._id, { status: nextStatus, info: 'quotation processed' }
|
|
130
|
+
return updateStatus(quotation._id, { status: nextStatus, info: 'quotation processed' });
|
|
132
131
|
};
|
|
133
|
-
const sendStatusToCustomer = async (quotation,
|
|
134
|
-
const { modules
|
|
132
|
+
const sendStatusToCustomer = async (quotation, unchainedAPI) => {
|
|
133
|
+
const { modules } = unchainedAPI;
|
|
135
134
|
const user = await modules.users.findUserById(quotation.userId);
|
|
136
|
-
const locale = modules.users.userLocale(user
|
|
135
|
+
const locale = modules.users.userLocale(user);
|
|
137
136
|
await modules.worker.addWork({
|
|
138
137
|
type: 'MESSAGE',
|
|
139
138
|
retries: 0,
|
|
@@ -142,18 +141,17 @@ export const configureQuotationsModule = async ({ db, options: quotationsOptions
|
|
|
142
141
|
template: 'QUOTATION_STATUS',
|
|
143
142
|
quotationId: quotation._id,
|
|
144
143
|
},
|
|
145
|
-
}
|
|
144
|
+
});
|
|
146
145
|
return quotation;
|
|
147
146
|
};
|
|
148
|
-
const updateQuotationFields = (fieldKeys) => async (quotationId, values
|
|
147
|
+
const updateQuotationFields = (fieldKeys) => async (quotationId, values) => {
|
|
149
148
|
log(`Update quotation fields ${fieldKeys.join(', ').toUpperCase()}`, {
|
|
150
149
|
quotationId,
|
|
151
|
-
userId,
|
|
152
150
|
});
|
|
153
151
|
const modifier = {
|
|
154
152
|
$set: fieldKeys.reduce((set, key) => ({ ...set, [key]: values[key] }), {}),
|
|
155
153
|
};
|
|
156
|
-
await mutations.update(quotationId, modifier
|
|
154
|
+
await mutations.update(quotationId, modifier);
|
|
157
155
|
const selector = generateDbFilterById(quotationId);
|
|
158
156
|
const quotation = await Quotations.findOne(selector, {});
|
|
159
157
|
await emit('QUOTATION_UPDATE', { quotation, fields: fieldKeys });
|
|
@@ -165,12 +163,17 @@ export const configureQuotationsModule = async ({ db, options: quotationsOptions
|
|
|
165
163
|
const quotationCount = await Quotations.countDocuments(buildFindSelector(query));
|
|
166
164
|
return quotationCount;
|
|
167
165
|
},
|
|
166
|
+
openQuotationWithProduct: async ({ productId }) => {
|
|
167
|
+
const selector = { productId };
|
|
168
|
+
selector.status = { $in: [QuotationStatus.REQUESTED, QuotationStatus.PROPOSED] };
|
|
169
|
+
return Quotations.findOne(selector);
|
|
170
|
+
},
|
|
168
171
|
findQuotation: async ({ quotationId }, options) => {
|
|
169
172
|
const selector = generateDbFilterById(quotationId);
|
|
170
173
|
return Quotations.findOne(selector, options);
|
|
171
174
|
},
|
|
172
175
|
findQuotations: async ({ limit, offset, sort, ...query }, options) => {
|
|
173
|
-
const defaultSortOption = [{ key: 'created', value: SortDirection.
|
|
176
|
+
const defaultSortOption = [{ key: 'created', value: SortDirection.ASC }];
|
|
174
177
|
const quotations = Quotations.find(buildFindSelector(query), {
|
|
175
178
|
limit,
|
|
176
179
|
skip: offset,
|
|
@@ -190,7 +193,7 @@ export const configureQuotationsModule = async ({ db, options: quotationsOptions
|
|
|
190
193
|
return quotation.status === QuotationStatus.PROPOSED && !isExpired(quotation);
|
|
191
194
|
},
|
|
192
195
|
// Processing
|
|
193
|
-
fullfillQuotation: async (quotationId, info,
|
|
196
|
+
fullfillQuotation: async (quotationId, info, unchainedAPI) => {
|
|
194
197
|
const selector = generateDbFilterById(quotationId);
|
|
195
198
|
const quotation = await Quotations.findOne(selector, {});
|
|
196
199
|
if (quotation.status === QuotationStatus.FULLFILLED)
|
|
@@ -198,51 +201,50 @@ export const configureQuotationsModule = async ({ db, options: quotationsOptions
|
|
|
198
201
|
let updatedQuotation = await updateStatus(quotation._id, {
|
|
199
202
|
status: QuotationStatus.FULLFILLED,
|
|
200
203
|
info: JSON.stringify(info),
|
|
201
|
-
}
|
|
202
|
-
updatedQuotation = await processQuotation(updatedQuotation, {},
|
|
203
|
-
return sendStatusToCustomer(updatedQuotation,
|
|
204
|
+
});
|
|
205
|
+
updatedQuotation = await processQuotation(updatedQuotation, {}, unchainedAPI);
|
|
206
|
+
return sendStatusToCustomer(updatedQuotation, unchainedAPI);
|
|
204
207
|
},
|
|
205
|
-
proposeQuotation: async (quotation, { quotationContext },
|
|
208
|
+
proposeQuotation: async (quotation, { quotationContext }, unchainedAPI) => {
|
|
206
209
|
if (quotation.status !== QuotationStatus.PROCESSING)
|
|
207
210
|
return quotation;
|
|
208
211
|
let updatedQuotation = await updateStatus(quotation._id, {
|
|
209
212
|
status: QuotationStatus.PROPOSED,
|
|
210
213
|
info: 'proposed manually',
|
|
211
|
-
}
|
|
212
|
-
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext },
|
|
213
|
-
return sendStatusToCustomer(updatedQuotation,
|
|
214
|
+
});
|
|
215
|
+
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext }, unchainedAPI);
|
|
216
|
+
return sendStatusToCustomer(updatedQuotation, unchainedAPI);
|
|
214
217
|
},
|
|
215
|
-
rejectQuotation: async (quotation, { quotationContext },
|
|
218
|
+
rejectQuotation: async (quotation, { quotationContext }, unchainedAPI) => {
|
|
216
219
|
if (quotation.status === QuotationStatus.FULLFILLED)
|
|
217
220
|
return quotation;
|
|
218
221
|
let updatedQuotation = await updateStatus(quotation._id, {
|
|
219
222
|
status: QuotationStatus.REJECTED,
|
|
220
223
|
info: 'rejected manually',
|
|
221
|
-
}
|
|
222
|
-
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext },
|
|
223
|
-
return sendStatusToCustomer(updatedQuotation,
|
|
224
|
+
});
|
|
225
|
+
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext }, unchainedAPI);
|
|
226
|
+
return sendStatusToCustomer(updatedQuotation, unchainedAPI);
|
|
224
227
|
},
|
|
225
|
-
verifyQuotation: async (quotation, { quotationContext },
|
|
228
|
+
verifyQuotation: async (quotation, { quotationContext }, unchainedAPI) => {
|
|
226
229
|
if (quotation.status !== QuotationStatus.REQUESTED)
|
|
227
230
|
return quotation;
|
|
228
231
|
let updatedQuotation = await updateStatus(quotation._id, {
|
|
229
232
|
status: QuotationStatus.PROCESSING,
|
|
230
233
|
info: 'verified elligibility manually',
|
|
231
|
-
}
|
|
232
|
-
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext },
|
|
233
|
-
return sendStatusToCustomer(updatedQuotation,
|
|
234
|
+
});
|
|
235
|
+
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext }, unchainedAPI);
|
|
236
|
+
return sendStatusToCustomer(updatedQuotation, unchainedAPI);
|
|
234
237
|
},
|
|
235
|
-
transformItemConfiguration: async (quotation, configuration,
|
|
236
|
-
const director = await QuotationDirector.actions({ quotation },
|
|
238
|
+
transformItemConfiguration: async (quotation, configuration, unchainedAPI) => {
|
|
239
|
+
const director = await QuotationDirector.actions({ quotation }, unchainedAPI);
|
|
237
240
|
return director.transformItemConfiguration(configuration);
|
|
238
241
|
},
|
|
239
242
|
// Mutations
|
|
240
|
-
create: async ({ countryCode, ...quotationData },
|
|
241
|
-
const { services
|
|
242
|
-
log('Create Quotation', { userId });
|
|
243
|
+
create: async ({ countryCode, ...quotationData }, unchainedAPI) => {
|
|
244
|
+
const { services } = unchainedAPI;
|
|
243
245
|
const currency = await services.countries.resolveDefaultCurrencyCode({
|
|
244
246
|
isoCode: countryCode,
|
|
245
|
-
},
|
|
247
|
+
}, unchainedAPI);
|
|
246
248
|
const quotationId = await mutations.create({
|
|
247
249
|
...quotationData,
|
|
248
250
|
configuration: quotationData.configuration || [],
|
|
@@ -250,10 +252,10 @@ export const configureQuotationsModule = async ({ db, options: quotationsOptions
|
|
|
250
252
|
currency,
|
|
251
253
|
log: [],
|
|
252
254
|
status: QuotationStatus.REQUESTED,
|
|
253
|
-
}
|
|
255
|
+
});
|
|
254
256
|
const newQuotation = await Quotations.findOne(generateDbFilterById(quotationId), {});
|
|
255
|
-
let quotation = await processQuotation(newQuotation, {},
|
|
256
|
-
quotation = await sendStatusToCustomer(quotation,
|
|
257
|
+
let quotation = await processQuotation(newQuotation, {}, unchainedAPI);
|
|
258
|
+
quotation = await sendStatusToCustomer(quotation, unchainedAPI);
|
|
257
259
|
await emit('QUOTATION_REQUEST_CREATE', { quotation });
|
|
258
260
|
return quotation;
|
|
259
261
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"configureQuotationsModule.js","sourceRoot":"","sources":["../../src/module/configureQuotationsModule.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"configureQuotationsModule.js","sourceRoot":"","sources":["../../src/module/configureQuotationsModule.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unchainedshop/core-quotations",
|
|
3
|
-
"version": "2.0.0-
|
|
3
|
+
"version": "2.0.0-beta9",
|
|
4
4
|
"main": "lib/quotations-index.js",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./lib/quotations-index.js",
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
"clean": "rm -rf lib",
|
|
13
13
|
"build": "npm run clean && tsc",
|
|
14
14
|
"watch": "tsc -w",
|
|
15
|
-
"test": "jest --
|
|
15
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest --detectOpenHandles --forceExit",
|
|
16
|
+
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch --detectOpenHandles --forceExit"
|
|
16
17
|
},
|
|
17
18
|
"repository": {
|
|
18
19
|
"type": "git",
|
|
@@ -30,17 +31,17 @@
|
|
|
30
31
|
},
|
|
31
32
|
"homepage": "https://github.com/unchainedshop/unchained#readme",
|
|
32
33
|
"dependencies": {
|
|
33
|
-
"@unchainedshop/events": "^2.0.0-
|
|
34
|
-
"@unchainedshop/logger": "^2.0.0-
|
|
35
|
-
"@unchainedshop/utils": "^2.0.0-
|
|
36
|
-
"simpl-schema": "^3.0
|
|
34
|
+
"@unchainedshop/events": "^2.0.0-beta9",
|
|
35
|
+
"@unchainedshop/logger": "^2.0.0-beta9",
|
|
36
|
+
"@unchainedshop/utils": "^2.0.0-beta9",
|
|
37
|
+
"simpl-schema": "^3.2.0"
|
|
37
38
|
},
|
|
38
39
|
"devDependencies": {
|
|
39
40
|
"@types/locale": "^0.1.1",
|
|
40
|
-
"@types/node": "^18.11.
|
|
41
|
-
"@unchainedshop/types": "^2.0.0-
|
|
41
|
+
"@types/node": "^18.11.12",
|
|
42
|
+
"@unchainedshop/types": "^2.0.0-beta9",
|
|
42
43
|
"jest": "^29.3.1",
|
|
43
44
|
"ts-jest": "^29.0.3",
|
|
44
|
-
"typescript": "^4.9.
|
|
45
|
+
"typescript": "^4.9.4"
|
|
45
46
|
}
|
|
46
47
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Context } from '@unchainedshop/types/api';
|
|
2
1
|
import { LogLevel, log } from '@unchainedshop/logger';
|
|
3
2
|
import {
|
|
4
3
|
IQuotationAdapter,
|
|
@@ -6,16 +5,17 @@ import {
|
|
|
6
5
|
QuotationContext,
|
|
7
6
|
} from '@unchainedshop/types/quotations';
|
|
8
7
|
import { BaseDirector } from '@unchainedshop/utils';
|
|
8
|
+
import { UnchainedCore } from '@unchainedshop/types/core';
|
|
9
9
|
import { QuotationError } from './QuotationError';
|
|
10
10
|
|
|
11
11
|
const baseDirector = BaseDirector<IQuotationAdapter>('QuotationDirector', {
|
|
12
12
|
adapterSortKey: 'orderIndex',
|
|
13
13
|
});
|
|
14
14
|
|
|
15
|
-
const findAppropriateAdapters = (quotationContext: QuotationContext,
|
|
15
|
+
const findAppropriateAdapters = (quotationContext: QuotationContext, unchainedAPI: UnchainedCore) =>
|
|
16
16
|
baseDirector.getAdapters({
|
|
17
17
|
adapterFilter: (Adapter: IQuotationAdapter) => {
|
|
18
|
-
const activated = Adapter.isActivatedFor(quotationContext,
|
|
18
|
+
const activated = Adapter.isActivatedFor(quotationContext, unchainedAPI);
|
|
19
19
|
if (!activated) {
|
|
20
20
|
log(`Quotation Director -> ${Adapter.key} (${Adapter.version}) skipped`, {
|
|
21
21
|
level: LogLevel.Warning,
|
|
@@ -28,10 +28,10 @@ const findAppropriateAdapters = (quotationContext: QuotationContext, requestCont
|
|
|
28
28
|
export const QuotationDirector: IQuotationDirector = {
|
|
29
29
|
...baseDirector,
|
|
30
30
|
|
|
31
|
-
actions: async (quotationContext,
|
|
32
|
-
const context = { ...quotationContext, ...
|
|
31
|
+
actions: async (quotationContext, unchainedAPI) => {
|
|
32
|
+
const context = { ...quotationContext, ...unchainedAPI };
|
|
33
33
|
|
|
34
|
-
const Adapter = findAppropriateAdapters(quotationContext,
|
|
34
|
+
const Adapter = findAppropriateAdapters(quotationContext, unchainedAPI)?.shift();
|
|
35
35
|
|
|
36
36
|
if (!Adapter) {
|
|
37
37
|
throw new Error('No suitable quotation plugin available for this context');
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { Update } from '@unchainedshop/types/common';
|
|
3
|
-
import { ModuleInput, ModuleMutations } from '@unchainedshop/types/core';
|
|
1
|
+
import { SortDirection, SortOption } from '@unchainedshop/types/api';
|
|
2
|
+
import { Query, Update } from '@unchainedshop/types/common';
|
|
3
|
+
import { ModuleInput, ModuleMutations, UnchainedCore } from '@unchainedshop/types/core';
|
|
4
|
+
|
|
4
5
|
import {
|
|
5
6
|
Quotation,
|
|
6
7
|
QuotationQuery,
|
|
@@ -18,7 +19,7 @@ import { quotationsSettings } from '../quotations-settings';
|
|
|
18
19
|
|
|
19
20
|
const QUOTATION_EVENTS: string[] = ['QUOTATION_REQUEST_CREATE', 'QUOTATION_REMOVE', 'QUOTATION_UPDATE'];
|
|
20
21
|
|
|
21
|
-
const buildFindSelector = (query: QuotationQuery = {}) => {
|
|
22
|
+
export const buildFindSelector = (query: QuotationQuery = {}) => {
|
|
22
23
|
const selector: { userId?: string; $text?: any } = {};
|
|
23
24
|
if (query.userId) {
|
|
24
25
|
selector.userId = query.userId;
|
|
@@ -67,10 +68,10 @@ export const configureQuotationsModule = async ({
|
|
|
67
68
|
|
|
68
69
|
const findNextStatus = async (
|
|
69
70
|
quotation: Quotation,
|
|
70
|
-
|
|
71
|
+
unchainedAPI: UnchainedCore,
|
|
71
72
|
): Promise<QuotationStatus> => {
|
|
72
73
|
let status = quotation.status as QuotationStatus;
|
|
73
|
-
const director = await QuotationDirector.actions({ quotation },
|
|
74
|
+
const director = await QuotationDirector.actions({ quotation }, unchainedAPI);
|
|
74
75
|
|
|
75
76
|
if (status === QuotationStatus.REQUESTED) {
|
|
76
77
|
if (!(await director.isManualRequestVerificationRequired())) {
|
|
@@ -85,11 +86,7 @@ export const configureQuotationsModule = async ({
|
|
|
85
86
|
return status;
|
|
86
87
|
};
|
|
87
88
|
|
|
88
|
-
const updateStatus: QuotationsModule['updateStatus'] = async (
|
|
89
|
-
quotationId,
|
|
90
|
-
{ status, info = '' },
|
|
91
|
-
userId,
|
|
92
|
-
) => {
|
|
89
|
+
const updateStatus: QuotationsModule['updateStatus'] = async (quotationId, { status, info = '' }) => {
|
|
93
90
|
const selector = generateDbFilterById(quotationId);
|
|
94
91
|
const quotation = await Quotations.findOne(selector, {});
|
|
95
92
|
|
|
@@ -99,7 +96,6 @@ export const configureQuotationsModule = async ({
|
|
|
99
96
|
const $set: Partial<Quotation> = {
|
|
100
97
|
status,
|
|
101
98
|
updated: new Date(),
|
|
102
|
-
updatedBy: userId,
|
|
103
99
|
};
|
|
104
100
|
|
|
105
101
|
switch (status) {
|
|
@@ -147,80 +143,72 @@ export const configureQuotationsModule = async ({
|
|
|
147
143
|
const processQuotation = async (
|
|
148
144
|
initialQuotation: Quotation,
|
|
149
145
|
params: { quotationContext?: any },
|
|
150
|
-
|
|
146
|
+
unchainedAPI: UnchainedCore,
|
|
151
147
|
) => {
|
|
152
|
-
const { modules
|
|
148
|
+
const { modules } = unchainedAPI;
|
|
153
149
|
|
|
154
150
|
const quotationId = initialQuotation._id;
|
|
155
151
|
let quotation = initialQuotation;
|
|
156
|
-
let nextStatus = await findNextStatus(quotation,
|
|
157
|
-
const director = await QuotationDirector.actions({ quotation },
|
|
152
|
+
let nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
153
|
+
const director = await QuotationDirector.actions({ quotation }, unchainedAPI);
|
|
158
154
|
|
|
159
155
|
if (quotation.status === QuotationStatus.REQUESTED && nextStatus !== QuotationStatus.REQUESTED) {
|
|
160
156
|
await director.submitRequest(params.quotationContext);
|
|
161
157
|
}
|
|
162
158
|
|
|
163
159
|
quotation = await modules.quotations.findQuotation({ quotationId });
|
|
164
|
-
nextStatus = await findNextStatus(quotation,
|
|
160
|
+
nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
165
161
|
if (nextStatus !== QuotationStatus.PROCESSING) {
|
|
166
162
|
await director.verifyRequest(params.quotationContext);
|
|
167
163
|
}
|
|
168
164
|
|
|
169
165
|
quotation = await modules.quotations.findQuotation({ quotationId });
|
|
170
|
-
nextStatus = await findNextStatus(quotation,
|
|
166
|
+
nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
171
167
|
if (nextStatus === QuotationStatus.REJECTED) {
|
|
172
168
|
await director.rejectRequest(params.quotationContext);
|
|
173
169
|
}
|
|
174
170
|
|
|
175
171
|
quotation = await modules.quotations.findQuotation({ quotationId });
|
|
176
|
-
nextStatus = await findNextStatus(quotation,
|
|
172
|
+
nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
177
173
|
if (nextStatus === QuotationStatus.PROPOSED) {
|
|
178
174
|
const proposal = await director.quote();
|
|
179
|
-
quotation = await modules.quotations.updateProposal(quotation._id, proposal
|
|
180
|
-
nextStatus = await findNextStatus(quotation,
|
|
175
|
+
quotation = await modules.quotations.updateProposal(quotation._id, proposal);
|
|
176
|
+
nextStatus = await findNextStatus(quotation, unchainedAPI);
|
|
181
177
|
}
|
|
182
178
|
|
|
183
|
-
return updateStatus(
|
|
184
|
-
quotation._id,
|
|
185
|
-
{ status: nextStatus, info: 'quotation processed' },
|
|
186
|
-
requestContext.userId,
|
|
187
|
-
);
|
|
179
|
+
return updateStatus(quotation._id, { status: nextStatus, info: 'quotation processed' });
|
|
188
180
|
};
|
|
189
181
|
|
|
190
|
-
const sendStatusToCustomer = async (quotation: Quotation,
|
|
191
|
-
const { modules
|
|
182
|
+
const sendStatusToCustomer = async (quotation: Quotation, unchainedAPI: UnchainedCore) => {
|
|
183
|
+
const { modules } = unchainedAPI;
|
|
192
184
|
|
|
193
185
|
const user = await modules.users.findUserById(quotation.userId);
|
|
194
|
-
const locale = modules.users.userLocale(user
|
|
195
|
-
|
|
196
|
-
await modules.worker.addWork(
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
quotationId: quotation._id,
|
|
204
|
-
},
|
|
186
|
+
const locale = modules.users.userLocale(user);
|
|
187
|
+
|
|
188
|
+
await modules.worker.addWork({
|
|
189
|
+
type: 'MESSAGE',
|
|
190
|
+
retries: 0,
|
|
191
|
+
input: {
|
|
192
|
+
locale,
|
|
193
|
+
template: 'QUOTATION_STATUS',
|
|
194
|
+
quotationId: quotation._id,
|
|
205
195
|
},
|
|
206
|
-
|
|
207
|
-
);
|
|
196
|
+
});
|
|
208
197
|
|
|
209
198
|
return quotation;
|
|
210
199
|
};
|
|
211
200
|
|
|
212
201
|
const updateQuotationFields =
|
|
213
|
-
(fieldKeys: Array<string>) => async (quotationId: string, values: any
|
|
202
|
+
(fieldKeys: Array<string>) => async (quotationId: string, values: any) => {
|
|
214
203
|
log(`Update quotation fields ${fieldKeys.join(', ').toUpperCase()}`, {
|
|
215
204
|
quotationId,
|
|
216
|
-
userId,
|
|
217
205
|
});
|
|
218
206
|
|
|
219
207
|
const modifier = {
|
|
220
208
|
$set: fieldKeys.reduce((set, key) => ({ ...set, [key]: values[key] }), {}),
|
|
221
209
|
};
|
|
222
210
|
|
|
223
|
-
await mutations.update(quotationId, modifier
|
|
211
|
+
await mutations.update(quotationId, modifier);
|
|
224
212
|
|
|
225
213
|
const selector = generateDbFilterById(quotationId);
|
|
226
214
|
const quotation = await Quotations.findOne(selector, {});
|
|
@@ -236,6 +224,12 @@ export const configureQuotationsModule = async ({
|
|
|
236
224
|
const quotationCount = await Quotations.countDocuments(buildFindSelector(query));
|
|
237
225
|
return quotationCount;
|
|
238
226
|
},
|
|
227
|
+
openQuotationWithProduct: async ({ productId }) => {
|
|
228
|
+
const selector: Query = { productId };
|
|
229
|
+
selector.status = { $in: [QuotationStatus.REQUESTED, QuotationStatus.PROPOSED] };
|
|
230
|
+
|
|
231
|
+
return Quotations.findOne(selector);
|
|
232
|
+
},
|
|
239
233
|
|
|
240
234
|
findQuotation: async ({ quotationId }, options) => {
|
|
241
235
|
const selector = generateDbFilterById(quotationId);
|
|
@@ -243,7 +237,7 @@ export const configureQuotationsModule = async ({
|
|
|
243
237
|
},
|
|
244
238
|
|
|
245
239
|
findQuotations: async ({ limit, offset, sort, ...query }, options) => {
|
|
246
|
-
const defaultSortOption: Array<SortOption> = [{ key: 'created', value: SortDirection.
|
|
240
|
+
const defaultSortOption: Array<SortOption> = [{ key: 'created', value: SortDirection.ASC }];
|
|
247
241
|
const quotations = Quotations.find(buildFindSelector(query), {
|
|
248
242
|
limit,
|
|
249
243
|
skip: offset,
|
|
@@ -268,112 +262,91 @@ export const configureQuotationsModule = async ({
|
|
|
268
262
|
},
|
|
269
263
|
|
|
270
264
|
// Processing
|
|
271
|
-
fullfillQuotation: async (quotationId, info,
|
|
265
|
+
fullfillQuotation: async (quotationId, info, unchainedAPI) => {
|
|
272
266
|
const selector = generateDbFilterById(quotationId);
|
|
273
267
|
const quotation = await Quotations.findOne(selector, {});
|
|
274
268
|
|
|
275
269
|
if (quotation.status === QuotationStatus.FULLFILLED) return quotation;
|
|
276
270
|
|
|
277
|
-
let updatedQuotation = await updateStatus(
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
info: JSON.stringify(info),
|
|
282
|
-
},
|
|
283
|
-
requestContext.userId,
|
|
284
|
-
);
|
|
271
|
+
let updatedQuotation = await updateStatus(quotation._id, {
|
|
272
|
+
status: QuotationStatus.FULLFILLED,
|
|
273
|
+
info: JSON.stringify(info),
|
|
274
|
+
});
|
|
285
275
|
|
|
286
|
-
updatedQuotation = await processQuotation(updatedQuotation, {},
|
|
276
|
+
updatedQuotation = await processQuotation(updatedQuotation, {}, unchainedAPI);
|
|
287
277
|
|
|
288
|
-
return sendStatusToCustomer(updatedQuotation,
|
|
278
|
+
return sendStatusToCustomer(updatedQuotation, unchainedAPI);
|
|
289
279
|
},
|
|
290
280
|
|
|
291
|
-
proposeQuotation: async (quotation, { quotationContext },
|
|
281
|
+
proposeQuotation: async (quotation, { quotationContext }, unchainedAPI) => {
|
|
292
282
|
if (quotation.status !== QuotationStatus.PROCESSING) return quotation;
|
|
293
283
|
|
|
294
|
-
let updatedQuotation = await updateStatus(
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
info: 'proposed manually',
|
|
299
|
-
},
|
|
300
|
-
requestContext.userId,
|
|
301
|
-
);
|
|
284
|
+
let updatedQuotation = await updateStatus(quotation._id, {
|
|
285
|
+
status: QuotationStatus.PROPOSED,
|
|
286
|
+
info: 'proposed manually',
|
|
287
|
+
});
|
|
302
288
|
|
|
303
|
-
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext },
|
|
289
|
+
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext }, unchainedAPI);
|
|
304
290
|
|
|
305
|
-
return sendStatusToCustomer(updatedQuotation,
|
|
291
|
+
return sendStatusToCustomer(updatedQuotation, unchainedAPI);
|
|
306
292
|
},
|
|
307
293
|
|
|
308
|
-
rejectQuotation: async (quotation, { quotationContext },
|
|
294
|
+
rejectQuotation: async (quotation, { quotationContext }, unchainedAPI) => {
|
|
309
295
|
if (quotation.status === QuotationStatus.FULLFILLED) return quotation;
|
|
310
296
|
|
|
311
|
-
let updatedQuotation = await updateStatus(
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
info: 'rejected manually',
|
|
316
|
-
},
|
|
317
|
-
requestContext.userId,
|
|
318
|
-
);
|
|
297
|
+
let updatedQuotation = await updateStatus(quotation._id, {
|
|
298
|
+
status: QuotationStatus.REJECTED,
|
|
299
|
+
info: 'rejected manually',
|
|
300
|
+
});
|
|
319
301
|
|
|
320
|
-
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext },
|
|
302
|
+
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext }, unchainedAPI);
|
|
321
303
|
|
|
322
|
-
return sendStatusToCustomer(updatedQuotation,
|
|
304
|
+
return sendStatusToCustomer(updatedQuotation, unchainedAPI);
|
|
323
305
|
},
|
|
324
306
|
|
|
325
|
-
verifyQuotation: async (quotation, { quotationContext },
|
|
307
|
+
verifyQuotation: async (quotation, { quotationContext }, unchainedAPI) => {
|
|
326
308
|
if (quotation.status !== QuotationStatus.REQUESTED) return quotation;
|
|
327
309
|
|
|
328
|
-
let updatedQuotation = await updateStatus(
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
info: 'verified elligibility manually',
|
|
333
|
-
},
|
|
334
|
-
requestContext.userId,
|
|
335
|
-
);
|
|
310
|
+
let updatedQuotation = await updateStatus(quotation._id, {
|
|
311
|
+
status: QuotationStatus.PROCESSING,
|
|
312
|
+
info: 'verified elligibility manually',
|
|
313
|
+
});
|
|
336
314
|
|
|
337
|
-
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext },
|
|
315
|
+
updatedQuotation = await processQuotation(updatedQuotation, { quotationContext }, unchainedAPI);
|
|
338
316
|
|
|
339
|
-
return sendStatusToCustomer(updatedQuotation,
|
|
317
|
+
return sendStatusToCustomer(updatedQuotation, unchainedAPI);
|
|
340
318
|
},
|
|
341
319
|
|
|
342
|
-
transformItemConfiguration: async (quotation, configuration,
|
|
343
|
-
const director = await QuotationDirector.actions({ quotation },
|
|
320
|
+
transformItemConfiguration: async (quotation, configuration, unchainedAPI) => {
|
|
321
|
+
const director = await QuotationDirector.actions({ quotation }, unchainedAPI);
|
|
344
322
|
return director.transformItemConfiguration(configuration);
|
|
345
323
|
},
|
|
346
324
|
|
|
347
325
|
// Mutations
|
|
348
|
-
create: async ({ countryCode, ...quotationData },
|
|
349
|
-
const { services
|
|
350
|
-
|
|
351
|
-
log('Create Quotation', { userId });
|
|
326
|
+
create: async ({ countryCode, ...quotationData }, unchainedAPI) => {
|
|
327
|
+
const { services } = unchainedAPI;
|
|
352
328
|
|
|
353
329
|
const currency = await services.countries.resolveDefaultCurrencyCode(
|
|
354
330
|
{
|
|
355
331
|
isoCode: countryCode,
|
|
356
332
|
},
|
|
357
|
-
|
|
333
|
+
unchainedAPI,
|
|
358
334
|
);
|
|
359
335
|
|
|
360
|
-
const quotationId = await mutations.create(
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
},
|
|
369
|
-
userId,
|
|
370
|
-
);
|
|
336
|
+
const quotationId = await mutations.create({
|
|
337
|
+
...quotationData,
|
|
338
|
+
configuration: quotationData.configuration || [],
|
|
339
|
+
countryCode,
|
|
340
|
+
currency,
|
|
341
|
+
log: [],
|
|
342
|
+
status: QuotationStatus.REQUESTED,
|
|
343
|
+
});
|
|
371
344
|
|
|
372
345
|
const newQuotation = await Quotations.findOne(generateDbFilterById(quotationId), {});
|
|
373
346
|
|
|
374
|
-
let quotation = await processQuotation(newQuotation, {},
|
|
347
|
+
let quotation = await processQuotation(newQuotation, {}, unchainedAPI);
|
|
375
348
|
|
|
376
|
-
quotation = await sendStatusToCustomer(quotation,
|
|
349
|
+
quotation = await sendStatusToCustomer(quotation, unchainedAPI);
|
|
377
350
|
|
|
378
351
|
await emit('QUOTATION_REQUEST_CREATE', { quotation });
|
|
379
352
|
|
|
@@ -1,73 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { QuotationsModule } from '@unchainedshop/types/quotations';
|
|
3
|
-
import { UsersModule } from '@unchainedshop/types/user';
|
|
4
|
-
import { assert } from 'chai';
|
|
5
|
-
import { configureQuotationsModule } from '@unchainedshop/core-quotations';
|
|
6
|
-
import { configureUsersModule } from '@unchainedshop/core-users';
|
|
7
|
-
import { initDb } from '@unchainedshop/mongodb';
|
|
8
|
-
import '../plugins/manual';
|
|
1
|
+
import {buildFindSelector} from '../src/module/configureQuotationsModule'
|
|
9
2
|
|
|
10
|
-
describe('
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
userId: string;
|
|
15
|
-
} = {
|
|
16
|
-
modules: {
|
|
17
|
-
quotations: null,
|
|
18
|
-
users: null,
|
|
19
|
-
},
|
|
20
|
-
services: {
|
|
21
|
-
countries: {
|
|
22
|
-
resolveDefaultCurrencyCode: () => 'CHF',
|
|
23
|
-
},
|
|
24
|
-
},
|
|
25
|
-
userId: 'Test-User-1234',
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
before(async () => {
|
|
29
|
-
const db = await initDb();
|
|
30
|
-
const quotationsModule = await configureQuotationsModule({ db }).catch(
|
|
31
|
-
(error) => {
|
|
32
|
-
console.error(error);
|
|
33
|
-
throw error;
|
|
34
|
-
}
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
const usersModules = await configureUsersModule({ db }).catch((error) => {
|
|
38
|
-
console.error(error);
|
|
39
|
-
throw error;
|
|
3
|
+
describe('Quotation', () => {
|
|
4
|
+
describe("buildFindSelector", () => {
|
|
5
|
+
it('Return correct filter object when passed no argument', async () => {
|
|
6
|
+
expect(buildFindSelector({})).toEqual({})
|
|
40
7
|
});
|
|
41
8
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
it('Insert quotation', async () => {
|
|
47
|
-
let quotation = await context.modules.quotations.create(
|
|
48
|
-
{
|
|
49
|
-
countryCode: 'CH',
|
|
50
|
-
productId: 'Product-123',
|
|
51
|
-
userId: 'Test-User-1',
|
|
52
|
-
},
|
|
53
|
-
context as Context
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
assert.ok(quotation);
|
|
57
|
-
const quotationId = quotation._id;
|
|
58
|
-
quotation = await context.modules.quotations.findQuotation({
|
|
59
|
-
quotationId,
|
|
9
|
+
it('Return correct filter object when passed queryString and userId', async () => {
|
|
10
|
+
expect(buildFindSelector({queryString: "hello world", userId: "admin-id"})).toEqual({ userId: 'admin-id', '$text': { '$search': 'hello world' } })
|
|
60
11
|
});
|
|
61
12
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
{
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
context.userId
|
|
71
|
-
);
|
|
72
|
-
});
|
|
13
|
+
it('Return correct filter object when passed userId', async () => {
|
|
14
|
+
expect(buildFindSelector({ userId: "admin-id"})).toEqual({ userId: 'admin-id' })
|
|
15
|
+
});
|
|
16
|
+
it('Return correct filter object when passed queryString', async () => {
|
|
17
|
+
expect(buildFindSelector({queryString: "hello world"})).toEqual({ '$text': { '$search': 'hello world' } })
|
|
18
|
+
});
|
|
19
|
+
})
|
|
20
|
+
|
|
73
21
|
});
|