@unchainedshop/core-quotations 3.0.0-rc5 → 3.0.0-rc7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/package.json +8 -5
  2. package/lib/db/QuotationStatus.d.ts +0 -8
  3. package/lib/db/QuotationStatus.d.ts.map +0 -1
  4. package/lib/db/QuotationStatus.js +0 -9
  5. package/lib/db/QuotationStatus.js.map +0 -1
  6. package/lib/director/QuotationAdapter.d.ts +0 -3
  7. package/lib/director/QuotationAdapter.d.ts.map +0 -1
  8. package/lib/director/QuotationAdapter.js +0 -40
  9. package/lib/director/QuotationAdapter.js.map +0 -1
  10. package/lib/director/QuotationDirector.d.ts +0 -3
  11. package/lib/director/QuotationDirector.d.ts.map +0 -1
  12. package/lib/director/QuotationDirector.js +0 -89
  13. package/lib/director/QuotationDirector.js.map +0 -1
  14. package/lib/director/QuotationError.d.ts +0 -7
  15. package/lib/director/QuotationError.d.ts.map +0 -1
  16. package/lib/director/QuotationError.js +0 -8
  17. package/lib/director/QuotationError.js.map +0 -1
  18. package/lib/module/configureQuotationsModule_BACKUP_56551.d.ts +0 -52
  19. package/lib/module/configureQuotationsModule_BACKUP_56551.d.ts.map +0 -1
  20. package/lib/module/configureQuotationsModule_BACKUP_56551.js +0 -152
  21. package/lib/module/configureQuotationsModule_BACKUP_56551.js.map +0 -1
  22. package/lib/module/configureQuotationsModule_BASE_56551.d.ts +0 -65
  23. package/lib/module/configureQuotationsModule_BASE_56551.d.ts.map +0 -1
  24. package/lib/module/configureQuotationsModule_BASE_56551.js +0 -259
  25. package/lib/module/configureQuotationsModule_BASE_56551.js.map +0 -1
  26. package/lib/module/configureQuotationsModule_LOCAL_56551.d.ts +0 -51
  27. package/lib/module/configureQuotationsModule_LOCAL_56551.d.ts.map +0 -1
  28. package/lib/module/configureQuotationsModule_LOCAL_56551.js +0 -145
  29. package/lib/module/configureQuotationsModule_LOCAL_56551.js.map +0 -1
  30. package/lib/module/configureQuotationsModule_REMOTE_56551.d.ts +0 -66
  31. package/lib/module/configureQuotationsModule_REMOTE_56551.d.ts.map +0 -1
  32. package/lib/module/configureQuotationsModule_REMOTE_56551.js +0 -266
  33. package/lib/module/configureQuotationsModule_REMOTE_56551.js.map +0 -1
  34. package/lib/quotations-index_BACKUP_56874.d.ts +0 -4
  35. package/lib/quotations-index_BACKUP_56874.d.ts.map +0 -1
  36. package/lib/quotations-index_BACKUP_56874.js +0 -4
  37. package/lib/quotations-index_BACKUP_56874.js.map +0 -1
  38. package/lib/quotations-index_BASE_56874.d.ts +0 -8
  39. package/lib/quotations-index_BASE_56874.d.ts.map +0 -1
  40. package/lib/quotations-index_BASE_56874.js +0 -8
  41. package/lib/quotations-index_BASE_56874.js.map +0 -1
  42. package/lib/quotations-index_LOCAL_56874.d.ts +0 -4
  43. package/lib/quotations-index_LOCAL_56874.d.ts.map +0 -1
  44. package/lib/quotations-index_LOCAL_56874.js +0 -4
  45. package/lib/quotations-index_LOCAL_56874.js.map +0 -1
  46. package/lib/quotations-index_REMOTE_56874.d.ts +0 -9
  47. package/lib/quotations-index_REMOTE_56874.d.ts.map +0 -1
  48. package/lib/quotations-index_REMOTE_56874.js +0 -9
  49. package/lib/quotations-index_REMOTE_56874.js.map +0 -1
  50. package/lib/types.d.ts +0 -68
  51. package/lib/types.d.ts.map +0 -1
  52. package/lib/types.js +0 -16
  53. package/lib/types.js.map +0 -1
@@ -1,259 +0,0 @@
1
- import { SortDirection } from '@unchainedshop/utils';
2
- import { emit, registerEvents } from '@unchainedshop/events';
3
- import { generateDbFilterById, buildSortOptions, generateDbObjectId, } from '@unchainedshop/mongodb';
4
- import { QuotationsCollection } from '../db/QuotationsCollection.js';
5
- import { QuotationStatus } from '../db/QuotationStatus.js';
6
- import { QuotationDirector } from '../quotations-index.js';
7
- import { quotationsSettings } from '../quotations-settings.js';
8
- import { resolveBestCurrency } from '@unchainedshop/utils';
9
- const QUOTATION_EVENTS = ['QUOTATION_REQUEST_CREATE', 'QUOTATION_REMOVE', 'QUOTATION_UPDATE'];
10
- export const buildFindSelector = (query = {}) => {
11
- const selector = {};
12
- if (query.userId) {
13
- selector.userId = query.userId;
14
- }
15
- if (query.queryString) {
16
- selector.$text = { $search: query.queryString };
17
- }
18
- return selector;
19
- };
20
- const isExpired = (quotation, { referenceDate }) => {
21
- const relevantDate = referenceDate ? new Date(referenceDate) : new Date();
22
- const expiryDate = new Date(quotation.expires);
23
- const isQuotationExpired = relevantDate.getTime() > expiryDate.getTime();
24
- return isQuotationExpired;
25
- };
26
- export const configureQuotationsModule = async ({ db, options: quotationsOptions = {}, }) => {
27
- registerEvents(QUOTATION_EVENTS);
28
- quotationsSettings.configureSettings(quotationsOptions);
29
- const Quotations = await QuotationsCollection(db);
30
- const findNewQuotationNumber = async (quotation, index = 0) => {
31
- const newHashID = quotationsSettings.quotationNumberHashFn(quotation, index);
32
- if ((await Quotations.countDocuments({ quotationNumber: newHashID }, { limit: 1 })) === 0) {
33
- return newHashID;
34
- }
35
- return findNewQuotationNumber(quotation, index + 1);
36
- };
37
- const findNextStatus = async (quotation, unchainedAPI) => {
38
- let status = quotation.status;
39
- const director = await QuotationDirector.actions({ quotation }, unchainedAPI);
40
- if (status === QuotationStatus.REQUESTED) {
41
- if (!(await director.isManualRequestVerificationRequired())) {
42
- status = QuotationStatus.PROCESSING;
43
- }
44
- }
45
- if (status === QuotationStatus.PROCESSING) {
46
- if (!(await director.isManualProposalRequired())) {
47
- status = QuotationStatus.PROPOSED;
48
- }
49
- }
50
- return status;
51
- };
52
- const updateStatus = async (quotationId, { status, info = '' }) => {
53
- const selector = generateDbFilterById(quotationId);
54
- const quotation = await Quotations.findOne(selector, {});
55
- if (quotation.status === status)
56
- return quotation;
57
- const date = new Date();
58
- const $set = {
59
- status,
60
- updated: new Date(),
61
- };
62
- switch (status) {
63
- // explicitly use fallthrough here!
64
- case QuotationStatus.FULLFILLED:
65
- if (!quotation.fullfilled) {
66
- $set.fullfilled = date;
67
- }
68
- $set.expires = date;
69
- case QuotationStatus.PROCESSING: // eslint-disable-line no-fallthrough
70
- if (!quotation.quotationNumber) {
71
- $set.quotationNumber = await findNewQuotationNumber(quotation);
72
- }
73
- break;
74
- case QuotationStatus.REJECTED:
75
- $set.expires = date;
76
- $set.rejected = date;
77
- break;
78
- default:
79
- break;
80
- }
81
- const modifier = {
82
- $set,
83
- $push: {
84
- log: {
85
- date,
86
- status,
87
- info,
88
- },
89
- },
90
- };
91
- const updatedQuotation = await Quotations.findOneAndUpdate(selector, modifier, {
92
- returnDocument: 'after',
93
- });
94
- await emit('QUOTATION_UPDATE', { quotation, field: 'status' });
95
- return updatedQuotation;
96
- };
97
- const processQuotation = async (initialQuotation, params, unchainedAPI) => {
98
- const { modules } = unchainedAPI;
99
- const quotationId = initialQuotation._id;
100
- let quotation = initialQuotation;
101
- let nextStatus = await findNextStatus(quotation, unchainedAPI);
102
- const director = await QuotationDirector.actions({ quotation }, unchainedAPI);
103
- if (quotation.status === QuotationStatus.REQUESTED && nextStatus !== QuotationStatus.REQUESTED) {
104
- await director.submitRequest(params.quotationContext);
105
- }
106
- quotation = await modules.quotations.findQuotation({ quotationId });
107
- nextStatus = await findNextStatus(quotation, unchainedAPI);
108
- if (nextStatus !== QuotationStatus.PROCESSING) {
109
- await director.verifyRequest(params.quotationContext);
110
- }
111
- quotation = await modules.quotations.findQuotation({ quotationId });
112
- nextStatus = await findNextStatus(quotation, unchainedAPI);
113
- if (nextStatus === QuotationStatus.REJECTED) {
114
- await director.rejectRequest(params.quotationContext);
115
- }
116
- quotation = await modules.quotations.findQuotation({ quotationId });
117
- nextStatus = await findNextStatus(quotation, unchainedAPI);
118
- if (nextStatus === QuotationStatus.PROPOSED) {
119
- const proposal = await director.quote();
120
- quotation = await modules.quotations.updateProposal(quotation._id, proposal);
121
- nextStatus = await findNextStatus(quotation, unchainedAPI);
122
- }
123
- return updateStatus(quotation._id, { status: nextStatus, info: 'quotation processed' });
124
- };
125
- const sendStatusToCustomer = async (quotation, unchainedAPI) => {
126
- const { modules } = unchainedAPI;
127
- const user = await modules.users.findUserById(quotation.userId);
128
- const locale = modules.users.userLocale(user);
129
- await modules.worker.addWork({
130
- type: 'MESSAGE',
131
- retries: 0,
132
- input: {
133
- locale,
134
- template: 'QUOTATION_STATUS',
135
- quotationId: quotation._id,
136
- },
137
- });
138
- return quotation;
139
- };
140
- const updateQuotationFields = (fieldKeys) => async (quotationId, values) => {
141
- const quotation = await Quotations.findOneAndUpdate(generateDbFilterById(quotationId), {
142
- $set: {
143
- updated: new Date(),
144
- ...fieldKeys.reduce((set, key) => ({ ...set, [key]: values[key] }), {}),
145
- },
146
- });
147
- await emit('QUOTATION_UPDATE', { quotation, fields: fieldKeys });
148
- return quotation;
149
- };
150
- return {
151
- // Queries
152
- count: async (query) => {
153
- const quotationCount = await Quotations.countDocuments(buildFindSelector(query));
154
- return quotationCount;
155
- },
156
- openQuotationWithProduct: async ({ productId }) => {
157
- const selector = { productId };
158
- selector.status = { $in: [QuotationStatus.REQUESTED, QuotationStatus.PROPOSED] };
159
- return Quotations.findOne(selector);
160
- },
161
- findQuotation: async ({ quotationId }, options) => {
162
- const selector = generateDbFilterById(quotationId);
163
- return Quotations.findOne(selector, options);
164
- },
165
- findQuotations: async ({ limit, offset, sort, ...query }, options) => {
166
- const defaultSortOption = [{ key: 'created', value: SortDirection.ASC }];
167
- const quotations = Quotations.find(buildFindSelector(query), {
168
- limit,
169
- skip: offset,
170
- sort: buildSortOptions(sort || defaultSortOption),
171
- ...options,
172
- });
173
- return quotations.toArray();
174
- },
175
- // Transformations
176
- normalizedStatus: (quotation) => {
177
- return quotation.status === null
178
- ? QuotationStatus.REQUESTED
179
- : quotation.status;
180
- },
181
- isExpired,
182
- isProposalValid: (quotation) => {
183
- return quotation.status === QuotationStatus.PROPOSED && !isExpired(quotation);
184
- },
185
- // Processing
186
- fullfillQuotation: async (quotationId, info, unchainedAPI) => {
187
- const selector = generateDbFilterById(quotationId);
188
- const quotation = await Quotations.findOne(selector, {});
189
- if (quotation.status === QuotationStatus.FULLFILLED)
190
- return quotation;
191
- let updatedQuotation = await updateStatus(quotation._id, {
192
- status: QuotationStatus.FULLFILLED,
193
- info: JSON.stringify(info),
194
- });
195
- updatedQuotation = await processQuotation(updatedQuotation, {}, unchainedAPI);
196
- return sendStatusToCustomer(updatedQuotation, unchainedAPI);
197
- },
198
- proposeQuotation: async (quotation, { quotationContext }, unchainedAPI) => {
199
- if (quotation.status !== QuotationStatus.PROCESSING)
200
- return quotation;
201
- let updatedQuotation = await updateStatus(quotation._id, {
202
- status: QuotationStatus.PROPOSED,
203
- info: 'proposed manually',
204
- });
205
- updatedQuotation = await processQuotation(updatedQuotation, { quotationContext }, unchainedAPI);
206
- return sendStatusToCustomer(updatedQuotation, unchainedAPI);
207
- },
208
- rejectQuotation: async (quotation, { quotationContext }, unchainedAPI) => {
209
- if (quotation.status === QuotationStatus.FULLFILLED)
210
- return quotation;
211
- let updatedQuotation = await updateStatus(quotation._id, {
212
- status: QuotationStatus.REJECTED,
213
- info: 'rejected manually',
214
- });
215
- updatedQuotation = await processQuotation(updatedQuotation, { quotationContext }, unchainedAPI);
216
- return sendStatusToCustomer(updatedQuotation, unchainedAPI);
217
- },
218
- verifyQuotation: async (quotation, { quotationContext }, unchainedAPI) => {
219
- if (quotation.status !== QuotationStatus.REQUESTED)
220
- return quotation;
221
- let updatedQuotation = await updateStatus(quotation._id, {
222
- status: QuotationStatus.PROCESSING,
223
- info: 'verified elligibility manually',
224
- });
225
- updatedQuotation = await processQuotation(updatedQuotation, { quotationContext }, unchainedAPI);
226
- return sendStatusToCustomer(updatedQuotation, unchainedAPI);
227
- },
228
- transformItemConfiguration: async (quotation, configuration, unchainedAPI) => {
229
- const director = await QuotationDirector.actions({ quotation }, unchainedAPI);
230
- return director.transformItemConfiguration(configuration);
231
- },
232
- // Mutations
233
- create: async ({ countryCode, ...quotationData }, unchainedAPI) => {
234
- const { modules } = unchainedAPI;
235
- const countryObject = await modules.countries.findCountry({ isoCode: countryCode });
236
- const currencies = await modules.currencies.findCurrencies({ includeInactive: false });
237
- const currency = resolveBestCurrency(countryObject.defaultCurrencyCode, currencies);
238
- const { insertedId: quotationId } = await Quotations.insertOne({
239
- _id: generateDbObjectId(),
240
- created: new Date(),
241
- ...quotationData,
242
- configuration: quotationData.configuration || [],
243
- countryCode,
244
- currency,
245
- log: [],
246
- status: QuotationStatus.REQUESTED,
247
- });
248
- const newQuotation = await Quotations.findOne(generateDbFilterById(quotationId), {});
249
- let quotation = await processQuotation(newQuotation, {}, unchainedAPI);
250
- quotation = await sendStatusToCustomer(quotation, unchainedAPI);
251
- await emit('QUOTATION_REQUEST_CREATE', { quotation });
252
- return quotation;
253
- },
254
- updateContext: updateQuotationFields(['context']),
255
- updateProposal: updateQuotationFields(['price', 'expires', 'meta']),
256
- updateStatus,
257
- };
258
- };
259
- //# sourceMappingURL=configureQuotationsModule_BASE_56551.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureQuotationsModule_BASE_56551.js","sourceRoot":"","sources":["../../src/module/configureQuotationsModule_BASE_56551.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAc,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAEhB,kBAAkB,GAEnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAA6B,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAyE3D,MAAM,gBAAgB,GAAa,CAAC,0BAA0B,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;AAExG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,QAAwB,EAAE,EAAE,EAAE;IAC9D,MAAM,QAAQ,GAAqC,EAAE,CAAC;IACtD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IACjC,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,QAAQ,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;IAClD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,SAAS,GAAkC,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;IAChF,MAAM,YAAY,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC1E,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC;IACzE,OAAO,kBAAkB,CAAC;AAC5B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAAE,EAC9C,EAAE,EACF,OAAO,EAAE,iBAAiB,GAAG,EAAE,GACQ,EAA6B,EAAE;IACtE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAEjC,kBAAkB,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,CAAC;IAExD,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAElD,MAAM,sBAAsB,GAAG,KAAK,EAAE,SAAoB,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;QACvE,MAAM,SAAS,GAAG,kBAAkB,CAAC,qBAAqB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7E,IAAI,CAAC,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1F,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,sBAAsB,CAAC,SAAS,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,SAAoB,EAAE,YAAY,EAA4B,EAAE;QAC5F,IAAI,MAAM,GAAG,SAAS,CAAC,MAAyB,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,CAAC;QAE9E,IAAI,MAAM,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;YACzC,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,mCAAmC,EAAE,CAAC,EAAE,CAAC;gBAC5D,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC;YACtC,CAAC;QACH,CAAC;QACD,IAAI,MAAM,KAAK,eAAe,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,CAAC,MAAM,QAAQ,CAAC,wBAAwB,EAAE,CAAC,EAAE,CAAC;gBACjD,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,YAAY,GAAqC,KAAK,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE;QAClG,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAEzD,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,SAAS,CAAC;QAElD,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,GAAuB;YAC/B,MAAM;YACN,OAAO,EAAE,IAAI,IAAI,EAAE;SACpB,CAAC;QAEF,QAAQ,MAAM,EAAE,CAAC;YACf,mCAAmC;YACnC,KAAK,eAAe,CAAC,UAAU;gBAC7B,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;oBAC1B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACzB,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,KAAK,eAAe,CAAC,UAAU,EAAE,qCAAqC;gBACpE,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;oBAC/B,IAAI,CAAC,eAAe,GAAG,MAAM,sBAAsB,CAAC,SAAS,CAAC,CAAC;gBACjE,CAAC;gBACD,MAAM;YACR,KAAK,eAAe,CAAC,QAAQ;gBAC3B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR;gBACE,MAAM;QACV,CAAC;QAED,MAAM,QAAQ,GAAoC;YAChD,IAAI;YACJ,KAAK,EAAE;gBACL,GAAG,EAAE;oBACH,IAAI;oBACJ,MAAM;oBACN,IAAI;iBACL;aACF;SACF,CAAC;QAEF,MAAM,gBAAgB,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,EAAE;YAC7E,cAAc,EAAE,OAAO;SACxB,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAE/D,OAAO,gBAAgB,CAAC;IAC1B,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,KAAK,EAC5B,gBAA2B,EAC3B,MAAkC,EAClC,YAAY,EACZ,EAAE;QACF,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;QAEjC,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC;QACzC,IAAI,SAAS,GAAG,gBAAgB,CAAC;QACjC,IAAI,UAAU,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,CAAC;QAE9E,IAAI,SAAS,CAAC,MAAM,KAAK,eAAe,CAAC,SAAS,IAAI,UAAU,KAAK,eAAe,CAAC,SAAS,EAAE,CAAC;YAC/F,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACxD,CAAC;QAED,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACpE,UAAU,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,UAAU,KAAK,eAAe,CAAC,UAAU,EAAE,CAAC;YAC9C,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACxD,CAAC;QAED,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACpE,UAAU,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,UAAU,KAAK,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC5C,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACxD,CAAC;QAED,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACpE,UAAU,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC3D,IAAI,UAAU,KAAK,eAAe,CAAC,QAAQ,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAC;YACxC,SAAS,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;YAC7E,UAAU,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,qBAAqB,EAAE,CAAC,CAAC;IAC1F,CAAC,CAAC;IAEF,MAAM,oBAAoB,GAAG,KAAK,EAAE,SAAoB,EAAE,YAAY,EAAE,EAAE;QACxE,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;QAEjC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QAE9C,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;YAC3B,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC;YACV,KAAK,EAAE;gBACL,MAAM;gBACN,QAAQ,EAAE,kBAAkB;gBAC5B,WAAW,EAAE,SAAS,CAAC,GAAG;aAC3B;SACF,CAAC,CAAC;QAEH,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEF,MAAM,qBAAqB,GACzB,CAAC,SAAwB,EAAE,EAAE,CAAC,KAAK,EAAE,WAAmB,EAAE,MAAW,EAAE,EAAE;QACvE,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE;YACrF,IAAI,EAAE;gBACJ,OAAO,EAAE,IAAI,IAAI,EAAE;gBACnB,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;aACxE;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,kBAAkB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;QAEjE,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;IAEJ,OAAO;QACL,UAAU;QACV,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACrB,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;YACjF,OAAO,cAAc,CAAC;QACxB,CAAC;QACD,wBAAwB,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;YAChD,MAAM,QAAQ,GAA8B,EAAE,SAAS,EAAE,CAAC;YAC1D,QAAQ,CAAC,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;YAEjF,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE;YAChD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACnD,OAAO,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,CAAC;QAED,cAAc,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE;YACnE,MAAM,iBAAiB,GAAsB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;YAC5F,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBAC3D,KAAK;gBACL,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,gBAAgB,CAAC,IAAI,IAAI,iBAAiB,CAAC;gBACjD,GAAG,OAAO;aACX,CAAC,CAAC;YAEH,OAAO,UAAU,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC;QAED,kBAAkB;QAClB,gBAAgB,EAAE,CAAC,SAAS,EAAE,EAAE;YAC9B,OAAO,SAAS,CAAC,MAAM,KAAK,IAAI;gBAC9B,CAAC,CAAC,eAAe,CAAC,SAAS;gBAC3B,CAAC,CAAE,SAAS,CAAC,MAA0B,CAAC;QAC5C,CAAC;QAED,SAAS;QAET,eAAe,EAAE,CAAC,SAAS,EAAE,EAAE;YAC7B,OAAO,SAAS,CAAC,MAAM,KAAK,eAAe,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChF,CAAC;QAED,aAAa;QACb,iBAAiB,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;YAC3D,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAEzD,IAAI,SAAS,CAAC,MAAM,KAAK,eAAe,CAAC,UAAU;gBAAE,OAAO,SAAS,CAAC;YAEtE,IAAI,gBAAgB,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE;gBACvD,MAAM,EAAE,eAAe,CAAC,UAAU;gBAClC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;YAE9E,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC;QAED,gBAAgB,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,EAAE,YAAY,EAAE,EAAE;YACxE,IAAI,SAAS,CAAC,MAAM,KAAK,eAAe,CAAC,UAAU;gBAAE,OAAO,SAAS,CAAC;YAEtE,IAAI,gBAAgB,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE;gBACvD,MAAM,EAAE,eAAe,CAAC,QAAQ;gBAChC,IAAI,EAAE,mBAAmB;aAC1B,CAAC,CAAC;YAEH,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,EAAE,gBAAgB,EAAE,EAAE,YAAY,CAAC,CAAC;YAEhG,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC;QAED,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,EAAE,YAAY,EAAE,EAAE;YACvE,IAAI,SAAS,CAAC,MAAM,KAAK,eAAe,CAAC,UAAU;gBAAE,OAAO,SAAS,CAAC;YAEtE,IAAI,gBAAgB,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE;gBACvD,MAAM,EAAE,eAAe,CAAC,QAAQ;gBAChC,IAAI,EAAE,mBAAmB;aAC1B,CAAC,CAAC;YAEH,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,EAAE,gBAAgB,EAAE,EAAE,YAAY,CAAC,CAAC;YAEhG,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC;QAED,eAAe,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,gBAAgB,EAAE,EAAE,YAAY,EAAE,EAAE;YACvE,IAAI,SAAS,CAAC,MAAM,KAAK,eAAe,CAAC,SAAS;gBAAE,OAAO,SAAS,CAAC;YAErE,IAAI,gBAAgB,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE;gBACvD,MAAM,EAAE,eAAe,CAAC,UAAU;gBAClC,IAAI,EAAE,gCAAgC;aACvC,CAAC,CAAC;YAEH,gBAAgB,GAAG,MAAM,gBAAgB,CAAC,gBAAgB,EAAE,EAAE,gBAAgB,EAAE,EAAE,YAAY,CAAC,CAAC;YAEhG,OAAO,oBAAoB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAC9D,CAAC;QAED,0BAA0B,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,EAAE;YAC3E,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,YAAY,CAAC,CAAC;YAC9E,OAAO,QAAQ,CAAC,0BAA0B,CAAC,aAAa,CAAC,CAAC;QAC5D,CAAC;QAED,YAAY;QACZ,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,aAAa,EAAE,EAAE,YAAY,EAAE,EAAE;YAChE,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC;YAEjC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;YACpF,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;YACvF,MAAM,QAAQ,GAAG,mBAAmB,CAAC,aAAa,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC;YAEpF,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,UAAU,CAAC,SAAS,CAAC;gBAC7D,GAAG,EAAE,kBAAkB,EAAE;gBACzB,OAAO,EAAE,IAAI,IAAI,EAAE;gBACnB,GAAG,aAAa;gBAChB,aAAa,EAAE,aAAa,CAAC,aAAa,IAAI,EAAE;gBAChD,WAAW;gBACX,QAAQ;gBACR,GAAG,EAAE,EAAE;gBACP,MAAM,EAAE,eAAe,CAAC,SAAS;aAClC,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;YAErF,IAAI,SAAS,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,EAAE,EAAE,YAAY,CAAC,CAAC;YAEvE,SAAS,GAAG,MAAM,oBAAoB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;YAEhE,MAAM,IAAI,CAAC,0BAA0B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAEtD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,aAAa,EAAE,qBAAqB,CAAC,CAAC,SAAS,CAAC,CAAC;QACjD,cAAc,EAAE,qBAAqB,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAEnE,YAAY;KACb,CAAC;AACJ,CAAC,CAAC"}
@@ -1,51 +0,0 @@
1
- import { SortOption } from '@unchainedshop/utils';
2
- import { Quotation, QuotationStatus } from '../db/QuotationsCollection.js';
3
- import { mongodb, ModuleInput } from '@unchainedshop/mongodb';
4
- import { QuotationsSettingsOptions } from '../quotations-settings.js';
5
- export type QuotationQuery = {
6
- userId?: string;
7
- queryString?: string;
8
- };
9
- export interface QuotationData {
10
- configuration?: Array<{
11
- key: string;
12
- value: string;
13
- }>;
14
- countryCode?: string;
15
- productId: string;
16
- userId: string;
17
- }
18
- export declare const buildFindSelector: (query?: QuotationQuery) => {
19
- userId?: string;
20
- $text?: any;
21
- };
22
- export declare const configureQuotationsModule: ({ db, options: quotationsOptions, }: ModuleInput<QuotationsSettingsOptions>) => Promise<{
23
- count: (query: QuotationQuery) => Promise<number>;
24
- openQuotationWithProduct: ({ productId }: {
25
- productId: string;
26
- }) => Promise<Quotation>;
27
- findQuotation: ({ quotationId }: {
28
- quotationId: string;
29
- }, options?: mongodb.FindOptions<Quotation>) => Promise<Quotation>;
30
- findQuotations: ({ limit, offset, sort, ...query }: QuotationQuery & {
31
- limit?: number;
32
- offset?: number;
33
- sort?: Array<SortOption>;
34
- }, options?: mongodb.FindOptions<Quotation>) => Promise<Array<Quotation>>;
35
- normalizedStatus: (quotation: Quotation) => QuotationStatus;
36
- isExpired(quotation: Quotation, { referenceDate }: {
37
- referenceDate: Date;
38
- }): boolean;
39
- isProposalValid(quotation: Quotation): boolean;
40
- create: ({ countryCode, currency, ...quotationData }: QuotationData & {
41
- currency: string;
42
- }) => Promise<Quotation>;
43
- updateContext: (quotationId: string, values: any) => Promise<Quotation>;
44
- updateProposal: (quotationId: string, values: any) => Promise<Quotation>;
45
- updateStatus: (quotationId: string, { status, info }: {
46
- status: QuotationStatus;
47
- info?: string;
48
- }) => Promise<Quotation>;
49
- }>;
50
- export type QuotationsModule = Awaited<ReturnType<typeof configureQuotationsModule>>;
51
- //# sourceMappingURL=configureQuotationsModule_LOCAL_56551.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureQuotationsModule_LOCAL_56551.d.ts","sourceRoot":"","sources":["../../src/module/configureQuotationsModule_LOCAL_56551.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAGL,OAAO,EAEP,WAAW,EACZ,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAsB,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAE1F,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AACF,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAID,eAAO,MAAM,iBAAiB,WAAW,cAAc;aAC1B,MAAM;YAAU,GAAG;CAS/C,CAAC;AAEF,eAAO,MAAM,yBAAyB,wCAGnC,WAAW,CAAC,yBAAyB,CAAC;mBAuFhB,cAAc,KAAG,OAAO,CAAC,MAAM,CAAC;8CAIL;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,SAAS,CAAC;qCAQvE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,YAC9B,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,KACvC,OAAO,CAAC,SAAS,CAAC;wDAWhB,cAAc,GAAG;QAClB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;KAC1B,YACS,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,KACvC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;kCAaE,SAAS,KAAG,eAAe;yBAMpC,SAAS,qBAAqB;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE;+BAO/C,SAAS,GAAG,OAAO;0DAS3C,aAAa,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC,SAAS,CAAC;iCAjFxC,MAAM,UAAU,GAAG,KAAG,OAAO,CAAC,SAAS,CAAC;kCAAxC,MAAM,UAAU,GAAG,KAAG,OAAO,CAAC,SAAS,CAAC;gCAxD/C,MAAM,oBACI;QAAE,MAAM,EAAE,eAAe,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KAChE,OAAO,CAAC,SAAS,CAAC;EA+JtB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC"}
@@ -1,145 +0,0 @@
1
- import { SortDirection } from '@unchainedshop/utils';
2
- import { QuotationStatus } from '../db/QuotationsCollection.js';
3
- import { emit, registerEvents } from '@unchainedshop/events';
4
- import { generateDbFilterById, buildSortOptions, generateDbObjectId, } from '@unchainedshop/mongodb';
5
- import { QuotationsCollection } from '../db/QuotationsCollection.js';
6
- import { quotationsSettings } from '../quotations-settings.js';
7
- const QUOTATION_EVENTS = ['QUOTATION_REQUEST_CREATE', 'QUOTATION_REMOVE', 'QUOTATION_UPDATE'];
8
- export const buildFindSelector = (query = {}) => {
9
- const selector = {};
10
- if (query.userId) {
11
- selector.userId = query.userId;
12
- }
13
- if (query.queryString) {
14
- selector.$text = { $search: query.queryString };
15
- }
16
- return selector;
17
- };
18
- export const configureQuotationsModule = async ({ db, options: quotationsOptions = {}, }) => {
19
- registerEvents(QUOTATION_EVENTS);
20
- quotationsSettings.configureSettings(quotationsOptions);
21
- const Quotations = await QuotationsCollection(db);
22
- const findNewQuotationNumber = async (quotation, index = 0) => {
23
- const newHashID = quotationsSettings.quotationNumberHashFn(quotation, index);
24
- if ((await Quotations.countDocuments({ quotationNumber: newHashID }, { limit: 1 })) === 0) {
25
- return newHashID;
26
- }
27
- return findNewQuotationNumber(quotation, index + 1);
28
- };
29
- const updateStatus = async (quotationId, { status, info = '' }) => {
30
- const selector = generateDbFilterById(quotationId);
31
- const quotation = await Quotations.findOne(selector, {});
32
- if (quotation.status === status)
33
- return quotation;
34
- const date = new Date();
35
- const $set = {
36
- status,
37
- updated: new Date(),
38
- };
39
- switch (status) {
40
- // explicitly use fallthrough here!
41
- case QuotationStatus.FULLFILLED:
42
- if (!quotation.fullfilled) {
43
- $set.fullfilled = date;
44
- }
45
- $set.expires = date;
46
- case QuotationStatus.PROCESSING: // eslint-disable-line no-fallthrough
47
- if (!quotation.quotationNumber) {
48
- $set.quotationNumber = await findNewQuotationNumber(quotation);
49
- }
50
- break;
51
- case QuotationStatus.REJECTED:
52
- $set.expires = date;
53
- $set.rejected = date;
54
- break;
55
- default:
56
- break;
57
- }
58
- const modifier = {
59
- $set,
60
- $push: {
61
- log: {
62
- date,
63
- status,
64
- info,
65
- },
66
- },
67
- };
68
- const updatedQuotation = await Quotations.findOneAndUpdate(selector, modifier, {
69
- returnDocument: 'after',
70
- });
71
- await emit('QUOTATION_UPDATE', { quotation, field: 'status' });
72
- return updatedQuotation;
73
- };
74
- const updateQuotationFields = (fieldKeys) => async (quotationId, values) => {
75
- const quotation = await Quotations.findOneAndUpdate(generateDbFilterById(quotationId), {
76
- $set: {
77
- updated: new Date(),
78
- ...fieldKeys.reduce((set, key) => ({ ...set, [key]: values[key] }), {}),
79
- },
80
- });
81
- await emit('QUOTATION_UPDATE', { quotation, fields: fieldKeys });
82
- return quotation;
83
- };
84
- return {
85
- // Queries
86
- count: async (query) => {
87
- const quotationCount = await Quotations.countDocuments(buildFindSelector(query));
88
- return quotationCount;
89
- },
90
- openQuotationWithProduct: async ({ productId }) => {
91
- const selector = { productId };
92
- selector.status = { $in: [QuotationStatus.REQUESTED, QuotationStatus.PROPOSED] };
93
- return Quotations.findOne(selector);
94
- },
95
- findQuotation: async ({ quotationId }, options) => {
96
- const selector = generateDbFilterById(quotationId);
97
- return Quotations.findOne(selector, options);
98
- },
99
- findQuotations: async ({ limit, offset, sort, ...query }, options) => {
100
- const defaultSortOption = [{ key: 'created', value: SortDirection.ASC }];
101
- const quotations = Quotations.find(buildFindSelector(query), {
102
- limit,
103
- skip: offset,
104
- sort: buildSortOptions(sort || defaultSortOption),
105
- ...options,
106
- });
107
- return quotations.toArray();
108
- },
109
- // Transformations
110
- normalizedStatus: (quotation) => {
111
- return quotation.status === null
112
- ? QuotationStatus.REQUESTED
113
- : quotation.status;
114
- },
115
- isExpired(quotation, { referenceDate }) {
116
- const relevantDate = referenceDate ? new Date(referenceDate) : new Date();
117
- const expiryDate = new Date(quotation.expires);
118
- const isQuotationExpired = relevantDate.getTime() > expiryDate.getTime();
119
- return isQuotationExpired;
120
- },
121
- isProposalValid(quotation) {
122
- return quotation.status === QuotationStatus.PROPOSED && !this.isExpired(quotation);
123
- },
124
- // Mutations
125
- create: async ({ countryCode, currency, ...quotationData }) => {
126
- const { insertedId: quotationId } = await Quotations.insertOne({
127
- _id: generateDbObjectId(),
128
- created: new Date(),
129
- ...quotationData,
130
- configuration: quotationData.configuration || [],
131
- countryCode,
132
- currency,
133
- log: [],
134
- status: QuotationStatus.REQUESTED,
135
- });
136
- const quotation = await Quotations.findOne(generateDbFilterById(quotationId), {});
137
- await emit('QUOTATION_REQUEST_CREATE', { quotation });
138
- return quotation;
139
- },
140
- updateContext: updateQuotationFields(['context']),
141
- updateProposal: updateQuotationFields(['price', 'expires', 'meta']),
142
- updateStatus,
143
- };
144
- };
145
- //# sourceMappingURL=configureQuotationsModule_LOCAL_56551.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureQuotationsModule_LOCAL_56551.js","sourceRoot":"","sources":["../../src/module/configureQuotationsModule_LOCAL_56551.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- import { SortOption } from '@unchainedshop/utils';
2
- import { Quotation, QuotationItemConfiguration, QuotationProposal } from '../types.js';
3
- import { mongodb, ModuleInput } from '@unchainedshop/mongodb';
4
- import { QuotationStatus } from '../db/QuotationStatus.js';
5
- import { QuotationsSettingsOptions } from '../quotations-settings.js';
6
- export type QuotationQuery = {
7
- userId?: string;
8
- queryString?: string;
9
- };
10
- export interface QuotationQueries {
11
- findQuotation: (query: {
12
- quotationId: string;
13
- }, options?: mongodb.FindOptions) => Promise<Quotation>;
14
- findQuotations: (query: QuotationQuery & {
15
- limit?: number;
16
- offset?: number;
17
- sort?: Array<SortOption>;
18
- }, options?: mongodb.FindOptions) => Promise<Array<Quotation>>;
19
- count: (query: QuotationQuery) => Promise<number>;
20
- openQuotationWithProduct: (param: {
21
- productId: string;
22
- }) => Promise<Quotation | null>;
23
- deleteRequestedUserQuotations: (userId: string) => Promise<number>;
24
- }
25
- export interface QuotationTransformations {
26
- isExpired: (quotation: Quotation, params?: {
27
- referenceDate: Date;
28
- }) => boolean;
29
- isProposalValid: (quotation: Quotation) => boolean;
30
- normalizedStatus: (quotation: Quotation) => string;
31
- }
32
- export type QuotationContextParams = (quotation: Quotation, params: {
33
- quotationContext?: any;
34
- }, unchainedAPI: any) => Promise<Quotation>;
35
- export interface QuotationData {
36
- configuration?: Array<{
37
- key: string;
38
- value: string;
39
- }>;
40
- countryCode?: string;
41
- productId: string;
42
- userId: string;
43
- }
44
- export interface QuotationMutations {
45
- create: (doc: QuotationData, unchainedAPI: any) => Promise<Quotation>;
46
- updateContext: (quotationId: string, context: any) => Promise<Quotation | null>;
47
- updateProposal: (quotationId: string, proposal: QuotationProposal) => Promise<Quotation>;
48
- updateStatus: (quotationId: string, params: {
49
- status: QuotationStatus;
50
- info?: string;
51
- }) => Promise<Quotation>;
52
- }
53
- export interface QuotationProcessing {
54
- fullfillQuotation: (quotationId: string, info: any, unchainedAPI: any) => Promise<Quotation>;
55
- proposeQuotation: QuotationContextParams;
56
- rejectQuotation: QuotationContextParams;
57
- verifyQuotation: QuotationContextParams;
58
- transformItemConfiguration: (quotation: Quotation, configuration: QuotationItemConfiguration, unchainedAPI: any) => Promise<QuotationItemConfiguration>;
59
- }
60
- export type QuotationsModule = QuotationQueries & QuotationTransformations & QuotationProcessing & QuotationMutations;
61
- export declare const buildFindSelector: (query?: QuotationQuery) => {
62
- userId?: string;
63
- $text?: any;
64
- };
65
- export declare const configureQuotationsModule: ({ db, options: quotationsOptions, }: ModuleInput<QuotationsSettingsOptions>) => Promise<QuotationsModule>;
66
- //# sourceMappingURL=configureQuotationsModule_REMOTE_56551.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"configureQuotationsModule_REMOTE_56551.d.ts","sourceRoot":"","sources":["../../src/module/configureQuotationsModule_REMOTE_56551.ts"],"names":[],"mappings":"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"}