@unchainedshop/core-orders 1.1.3

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 (137) hide show
  1. package/.npm/package/README +7 -0
  2. package/.npm/package/npm-shrinkwrap.json +190 -0
  3. package/.versions +54 -0
  4. package/README.md +5 -0
  5. package/lib/db/OrderDeliveriesCollection.d.ts +3 -0
  6. package/lib/db/OrderDeliveriesCollection.js +8 -0
  7. package/lib/db/OrderDeliveriesCollection.js.map +1 -0
  8. package/lib/db/OrderDeliveriesSchema.d.ts +1 -0
  9. package/lib/db/OrderDeliveriesSchema.js +20 -0
  10. package/lib/db/OrderDeliveriesSchema.js.map +1 -0
  11. package/lib/db/OrderDiscountTrigger.d.ts +4 -0
  12. package/lib/db/OrderDiscountTrigger.js +6 -0
  13. package/lib/db/OrderDiscountTrigger.js.map +1 -0
  14. package/lib/db/OrderDiscountsCollection.d.ts +3 -0
  15. package/lib/db/OrderDiscountsCollection.js +11 -0
  16. package/lib/db/OrderDiscountsCollection.js.map +1 -0
  17. package/lib/db/OrderDiscountsSchema.d.ts +1 -0
  18. package/lib/db/OrderDiscountsSchema.js +12 -0
  19. package/lib/db/OrderDiscountsSchema.js.map +1 -0
  20. package/lib/db/OrderPaymentsCollection.d.ts +3 -0
  21. package/lib/db/OrderPaymentsCollection.js +8 -0
  22. package/lib/db/OrderPaymentsCollection.js.map +1 -0
  23. package/lib/db/OrderPaymentsSchema.d.ts +1 -0
  24. package/lib/db/OrderPaymentsSchema.js +20 -0
  25. package/lib/db/OrderPaymentsSchema.js.map +1 -0
  26. package/lib/db/OrderPositionsCollection.d.ts +3 -0
  27. package/lib/db/OrderPositionsCollection.js +11 -0
  28. package/lib/db/OrderPositionsCollection.js.map +1 -0
  29. package/lib/db/OrderPositionsSchema.d.ts +1 -0
  30. package/lib/db/OrderPositionsSchema.js +37 -0
  31. package/lib/db/OrderPositionsSchema.js.map +1 -0
  32. package/lib/db/OrdersCollection.d.ts +3 -0
  33. package/lib/db/OrdersCollection.js +33 -0
  34. package/lib/db/OrdersCollection.js.map +1 -0
  35. package/lib/db/OrdersSchema.d.ts +1 -0
  36. package/lib/db/OrdersSchema.js +30 -0
  37. package/lib/db/OrdersSchema.js.map +1 -0
  38. package/lib/director/OrderDiscountAdapter.d.ts +2 -0
  39. package/lib/director/OrderDiscountAdapter.js +3 -0
  40. package/lib/director/OrderDiscountAdapter.js.map +1 -0
  41. package/lib/director/OrderDiscountDirector.d.ts +2 -0
  42. package/lib/director/OrderDiscountDirector.js +3 -0
  43. package/lib/director/OrderDiscountDirector.js.map +1 -0
  44. package/lib/director/OrderPricingAdapter.d.ts +3 -0
  45. package/lib/director/OrderPricingAdapter.js +25 -0
  46. package/lib/director/OrderPricingAdapter.js.map +1 -0
  47. package/lib/director/OrderPricingDirector.d.ts +2 -0
  48. package/lib/director/OrderPricingDirector.js +48 -0
  49. package/lib/director/OrderPricingDirector.js.map +1 -0
  50. package/lib/director/OrderPricingSheet.d.ts +3 -0
  51. package/lib/director/OrderPricingSheet.js +113 -0
  52. package/lib/director/OrderPricingSheet.js.map +1 -0
  53. package/lib/module/configureOrderDeliveriesModule.d.ts +7 -0
  54. package/lib/module/configureOrderDeliveriesModule.js +164 -0
  55. package/lib/module/configureOrderDeliveriesModule.js.map +1 -0
  56. package/lib/module/configureOrderDiscountsModule.d.ts +7 -0
  57. package/lib/module/configureOrderDiscountsModule.js +183 -0
  58. package/lib/module/configureOrderDiscountsModule.js.map +1 -0
  59. package/lib/module/configureOrderPaymentsModule.d.ts +7 -0
  60. package/lib/module/configureOrderPaymentsModule.js +229 -0
  61. package/lib/module/configureOrderPaymentsModule.js.map +1 -0
  62. package/lib/module/configureOrderPositionsModule.d.ts +7 -0
  63. package/lib/module/configureOrderPositionsModule.js +213 -0
  64. package/lib/module/configureOrderPositionsModule.js.map +1 -0
  65. package/lib/module/configureOrdersModule-mutations.d.ts +12 -0
  66. package/lib/module/configureOrdersModule-mutations.js +162 -0
  67. package/lib/module/configureOrdersModule-mutations.js.map +1 -0
  68. package/lib/module/configureOrdersModule-processing.d.ts +13 -0
  69. package/lib/module/configureOrdersModule-processing.js +343 -0
  70. package/lib/module/configureOrdersModule-processing.js.map +1 -0
  71. package/lib/module/configureOrdersModule-queries.d.ts +5 -0
  72. package/lib/module/configureOrdersModule-queries.js +55 -0
  73. package/lib/module/configureOrdersModule-queries.js.map +1 -0
  74. package/lib/module/configureOrdersModule-transformations.d.ts +5 -0
  75. package/lib/module/configureOrdersModule-transformations.js +108 -0
  76. package/lib/module/configureOrdersModule-transformations.js.map +1 -0
  77. package/lib/module/configureOrdersModule.d.ts +3 -0
  78. package/lib/module/configureOrdersModule.js +239 -0
  79. package/lib/module/configureOrdersModule.js.map +1 -0
  80. package/lib/orders-index.d.ts +11 -0
  81. package/lib/orders-index.js +12 -0
  82. package/lib/orders-index.js.map +1 -0
  83. package/lib/orders-settings.d.ts +20 -0
  84. package/lib/orders-settings.js +17 -0
  85. package/lib/orders-settings.js.map +1 -0
  86. package/lib/service/createUserCartService.d.ts +2 -0
  87. package/lib/service/createUserCartService.js +23 -0
  88. package/lib/service/createUserCartService.js.map +1 -0
  89. package/lib/service/migrateOrderCartService.d.ts +2 -0
  90. package/lib/service/migrateOrderCartService.js +10 -0
  91. package/lib/service/migrateOrderCartService.js.map +1 -0
  92. package/lib/service/orderServices.d.ts +2 -0
  93. package/lib/service/orderServices.js +7 -0
  94. package/lib/service/orderServices.js.map +1 -0
  95. package/package.js +33 -0
  96. package/package.json +43 -0
  97. package/plugins/discount-100-off.ts +44 -0
  98. package/plugins/discount-half-price-manual.ts +43 -0
  99. package/plugins/discount-half-price.ts +46 -0
  100. package/plugins/order-delivery.ts +45 -0
  101. package/plugins/order-discount.ts +158 -0
  102. package/plugins/order-items-discount.ts +116 -0
  103. package/plugins/order-items.ts +61 -0
  104. package/plugins/order-payment.ts +46 -0
  105. package/src/db/OrderDeliveriesCollection.ts +12 -0
  106. package/src/db/OrderDeliveriesSchema.js +24 -0
  107. package/src/db/OrderDiscountTrigger.ts +4 -0
  108. package/src/db/OrderDiscountsCollection.ts +15 -0
  109. package/src/db/OrderDiscountsSchema.js +15 -0
  110. package/src/db/OrderPaymentsCollection.ts +12 -0
  111. package/src/db/OrderPaymentsSchema.js +24 -0
  112. package/src/db/OrderPositionsCollection.ts +15 -0
  113. package/src/db/OrderPositionsSchema.js +41 -0
  114. package/src/db/OrdersCollection.ts +37 -0
  115. package/src/db/OrdersSchema.js +34 -0
  116. package/src/director/OrderDiscountAdapter.ts +5 -0
  117. package/src/director/OrderDiscountDirector.ts +4 -0
  118. package/src/director/OrderPricingAdapter.ts +41 -0
  119. package/src/director/OrderPricingDirector.ts +68 -0
  120. package/src/director/OrderPricingSheet.ts +138 -0
  121. package/src/module/configureOrderDeliveriesModule.ts +240 -0
  122. package/src/module/configureOrderDiscountsModule.ts +245 -0
  123. package/src/module/configureOrderPaymentsModule.ts +331 -0
  124. package/src/module/configureOrderPositionsModule.ts +329 -0
  125. package/src/module/configureOrdersModule-mutations.ts +230 -0
  126. package/src/module/configureOrdersModule-processing.ts +506 -0
  127. package/src/module/configureOrdersModule-queries.ts +71 -0
  128. package/src/module/configureOrdersModule-transformations.ts +145 -0
  129. package/src/module/configureOrdersModule.ts +359 -0
  130. package/src/orders-index.ts +15 -0
  131. package/src/orders-settings.ts +23 -0
  132. package/src/service/createUserCartService.ts +38 -0
  133. package/src/service/migrateOrderCartService.ts +22 -0
  134. package/src/service/orderServices.ts +8 -0
  135. package/tests/orders-index.test.ts +50 -0
  136. package/tsconfig.build.json +26 -0
  137. package/tsconfig.json +8 -0
@@ -0,0 +1,239 @@
1
+ import { OrderStatus } from '@unchainedshop/types/orders';
2
+ import { log } from '@unchainedshop/logger';
3
+ import { generateDbFilterById } from '@unchainedshop/utils';
4
+ import { OrderDeliveriesCollection } from '../db/OrderDeliveriesCollection';
5
+ import { OrderDiscountsCollection } from '../db/OrderDiscountsCollection';
6
+ import { OrderDiscountTrigger } from '../db/OrderDiscountTrigger';
7
+ import { OrderPaymentsCollection } from '../db/OrderPaymentsCollection';
8
+ import { OrderPositionsCollection } from '../db/OrderPositionsCollection';
9
+ import { OrdersCollection } from '../db/OrdersCollection';
10
+ import { OrderDiscountDirector } from '../director/OrderDiscountDirector';
11
+ import { OrderPricingDirector } from '../director/OrderPricingDirector';
12
+ import { ordersSettings } from '../orders-settings';
13
+ import { configureOrderDeliveriesModule } from './configureOrderDeliveriesModule';
14
+ import { configureOrderDiscountsModule } from './configureOrderDiscountsModule';
15
+ import { configureOrderPaymentsModule } from './configureOrderPaymentsModule';
16
+ import { configureOrderPositionsModule } from './configureOrderPositionsModule';
17
+ import { configureOrderModuleMutations } from './configureOrdersModule-mutations';
18
+ import { configureOrderModuleProcessing } from './configureOrdersModule-processing';
19
+ import { configureOrdersModuleQueries } from './configureOrdersModule-queries';
20
+ import { configureOrderModuleTransformations } from './configureOrdersModule-transformations';
21
+ export const configureOrdersModule = async ({ db, options: orderOptions = {}, }) => {
22
+ ordersSettings.configureSettings(orderOptions);
23
+ const Orders = await OrdersCollection(db);
24
+ const OrderDeliveries = await OrderDeliveriesCollection(db);
25
+ const OrderDiscounts = await OrderDiscountsCollection(db);
26
+ const OrderPayments = await OrderPaymentsCollection(db);
27
+ const OrderPositions = await OrderPositionsCollection(db);
28
+ const findOrderPositions = async (order) => OrderPositions.find({
29
+ orderId: order._id,
30
+ quantity: { $gt: 0 },
31
+ }, {}).toArray();
32
+ const findOrderDelivery = async (order) => OrderDeliveries.findOne(generateDbFilterById(order.deliveryId), {});
33
+ const findOrderPayment = async (order) => OrderPayments.findOne(generateDbFilterById(order.paymentId), {});
34
+ const findNewOrderNumber = async (order, index = 0) => {
35
+ const newHashID = ordersSettings.orderNumberHashFn(order, index);
36
+ if ((await Orders.countDocuments({ orderNumber: newHashID }, { limit: 1 })) === 0) {
37
+ return newHashID;
38
+ }
39
+ return findNewOrderNumber(order, index + 1);
40
+ };
41
+ const updateStatus = async (orderId, { status, info }, requestContext) => {
42
+ const selector = generateDbFilterById(orderId);
43
+ const order = await Orders.findOne(selector, {});
44
+ if (order.status === status)
45
+ return order;
46
+ const date = new Date();
47
+ const $set = {
48
+ status,
49
+ updated: new Date(),
50
+ updatedBy: requestContext.userId,
51
+ };
52
+ switch (status) {
53
+ // explicitly use fallthrough here!
54
+ case OrderStatus.FULLFILLED:
55
+ if (!order.fullfilled) {
56
+ $set.fullfilled = date;
57
+ }
58
+ case OrderStatus.REJECTED: // eslint-disable-line no-fallthrough
59
+ if (!order.rejected) {
60
+ $set.rejected = date;
61
+ }
62
+ case OrderStatus.CONFIRMED: // eslint-disable-line no-fallthrough
63
+ if (!order.confirmed) {
64
+ $set.confirmed = date;
65
+ }
66
+ case OrderStatus.PENDING: // eslint-disable-line no-fallthrough
67
+ if (!order.ordered) {
68
+ $set.ordered = date;
69
+ }
70
+ if (!order.orderNumber) {
71
+ // Order Numbers can be set by the user
72
+ $set.orderNumber = await findNewOrderNumber(order);
73
+ }
74
+ break;
75
+ default:
76
+ break;
77
+ }
78
+ const modifier = {
79
+ $set,
80
+ $push: {
81
+ log: {
82
+ date,
83
+ status,
84
+ info,
85
+ },
86
+ },
87
+ };
88
+ log(`New Status: ${status}`, { orderId });
89
+ await Orders.updateOne(selector, modifier);
90
+ return Orders.findOne(selector, {});
91
+ };
92
+ const updateDiscounts = async (order, requestContext) => {
93
+ const { modules } = requestContext;
94
+ // 1. go through existing order-discounts and check if discount still valid,
95
+ // those who are not valid anymore should get removed
96
+ const discounts = await modules.orders.discounts.findOrderDiscounts({
97
+ orderId: order._id,
98
+ });
99
+ await Promise.all(discounts.map(async (discount) => {
100
+ const isValid = await modules.orders.discounts.isValid(discount, requestContext);
101
+ if (!isValid) {
102
+ await modules.orders.discounts.delete(discount._id, requestContext);
103
+ }
104
+ }));
105
+ // 2. run auto-system discount
106
+ const cleanedDiscounts = await modules.orders.discounts.findOrderDiscounts({
107
+ orderId: order._id,
108
+ });
109
+ const currentDiscountKeys = cleanedDiscounts.map(({ discountKey }) => discountKey);
110
+ const director = await OrderDiscountDirector.actions({ order }, requestContext);
111
+ const systemDiscounts = await director.findSystemDiscounts();
112
+ await Promise.all(systemDiscounts
113
+ .filter((key) => currentDiscountKeys.indexOf(key) === -1)
114
+ .map((discountKey) => modules.orders.discounts.create({
115
+ orderId: order._id,
116
+ discountKey,
117
+ trigger: OrderDiscountTrigger.SYSTEM,
118
+ }, requestContext.userId)));
119
+ };
120
+ const initProviders = async (order, requestContext) => {
121
+ const { modules } = requestContext;
122
+ let updatedOrder = order;
123
+ // Init delivery provider
124
+ const supportedDeliveryProviders = await modules.delivery.findSupported({ order: updatedOrder }, requestContext);
125
+ const orderDelivery = await modules.orders.deliveries.findDelivery({
126
+ orderDeliveryId: updatedOrder.deliveryId,
127
+ });
128
+ const deliveryProviderId = orderDelivery?.deliveryProviderId;
129
+ const isAlreadyInitializedWithSupportedDeliveryProvider = supportedDeliveryProviders?.some((provider) => {
130
+ return provider._id === deliveryProviderId;
131
+ });
132
+ if (supportedDeliveryProviders?.length > 0 && !isAlreadyInitializedWithSupportedDeliveryProvider) {
133
+ const defaultOrderDeliveryProvider = await modules.delivery.determineDefault(supportedDeliveryProviders, { order: updatedOrder }, requestContext);
134
+ if (defaultOrderDeliveryProvider) {
135
+ updatedOrder = await modules.orders.setDeliveryProvider(updatedOrder._id, defaultOrderDeliveryProvider._id, requestContext);
136
+ }
137
+ }
138
+ // Init payment provider
139
+ const supportedPaymentProviders = await modules.payment.paymentProviders.findSupported({ order: updatedOrder }, requestContext);
140
+ const orderPayment = await modules.orders.payments.findOrderPayment({
141
+ orderPaymentId: updatedOrder.paymentId,
142
+ });
143
+ const paymentProviderId = orderPayment?.paymentProviderId;
144
+ const isAlreadyInitializedWithSupportedPaymentProvider = supportedPaymentProviders?.some((provider) => {
145
+ return provider._id === paymentProviderId;
146
+ });
147
+ if (supportedPaymentProviders?.length > 0 && !isAlreadyInitializedWithSupportedPaymentProvider) {
148
+ const paymentCredentials = await modules.payment.paymentCredentials.findPaymentCredentials({ userId: updatedOrder.userId, isPreferred: true }, {
149
+ sort: {
150
+ created: -1,
151
+ },
152
+ });
153
+ const defaultOrderPaymentProvider = await modules.payment.paymentProviders.determineDefault(supportedPaymentProviders, { order: updatedOrder, paymentCredentials }, requestContext);
154
+ if (defaultOrderPaymentProvider) {
155
+ updatedOrder = await modules.orders.setPaymentProvider(updatedOrder._id, defaultOrderPaymentProvider._id, requestContext);
156
+ }
157
+ }
158
+ return updatedOrder;
159
+ };
160
+ const updateCalculation = async (orderId, requestContext) => {
161
+ const { modules } = requestContext;
162
+ const selector = generateDbFilterById(orderId);
163
+ let order = (await Orders.findOne(selector, {}));
164
+ // Don't recalculate orders, only carts
165
+ if (order.status !== null)
166
+ return order;
167
+ await updateDiscounts(order, requestContext);
168
+ order = await initProviders(order, requestContext);
169
+ let orderPositions = (await findOrderPositions(order));
170
+ orderPositions = await Promise.all(orderPositions.map((orderPosition) => modules.orders.positions.updateCalculation(orderPosition, requestContext)));
171
+ let orderDelivery = (await findOrderDelivery(order));
172
+ if (orderDelivery) {
173
+ orderDelivery = await modules.orders.deliveries.updateCalculation(orderDelivery, requestContext);
174
+ }
175
+ let orderPayment = (await findOrderPayment(order));
176
+ if (orderPayment) {
177
+ orderPayment = await modules.orders.payments.updateCalculation(orderPayment, requestContext);
178
+ }
179
+ orderPositions = await Promise.all(orderPositions.map((orderPosition) => modules.orders.positions.updateScheduling({ order, orderDelivery, orderPosition }, requestContext)));
180
+ const pricing = await OrderPricingDirector.actions({ order, orderPositions, orderDelivery, orderPayment }, requestContext);
181
+ const calculation = await pricing.calculate();
182
+ await Orders.updateOne(selector, {
183
+ $set: {
184
+ calculation,
185
+ updated: new Date(),
186
+ updatedBy: requestContext.userId,
187
+ },
188
+ });
189
+ return Orders.findOne(selector, {});
190
+ };
191
+ const orderQueries = configureOrdersModuleQueries({ Orders });
192
+ const orderTransformations = configureOrderModuleTransformations({
193
+ Orders,
194
+ });
195
+ const orderProcessing = configureOrderModuleProcessing({
196
+ Orders,
197
+ OrderDeliveries,
198
+ OrderPayments,
199
+ OrderPositions,
200
+ updateCalculation,
201
+ updateStatus,
202
+ });
203
+ const orderMutations = configureOrderModuleMutations({
204
+ Orders,
205
+ OrderDeliveries,
206
+ OrderPayments,
207
+ initProviders,
208
+ updateCalculation,
209
+ updateStatus,
210
+ });
211
+ const orderDiscountsModule = configureOrderDiscountsModule({
212
+ OrderDiscounts,
213
+ updateCalculation,
214
+ });
215
+ const orderPositionsModule = configureOrderPositionsModule({
216
+ OrderPositions,
217
+ updateCalculation,
218
+ });
219
+ const orderPaymentsModule = configureOrderPaymentsModule({
220
+ OrderPayments,
221
+ updateCalculation,
222
+ });
223
+ const orderDeliveriesModule = configureOrderDeliveriesModule({
224
+ OrderDeliveries,
225
+ updateCalculation,
226
+ });
227
+ return {
228
+ ...orderQueries,
229
+ ...orderTransformations,
230
+ ...orderProcessing,
231
+ ...orderMutations,
232
+ // Subentities
233
+ deliveries: orderDeliveriesModule,
234
+ discounts: orderDiscountsModule,
235
+ positions: orderPositionsModule,
236
+ payments: orderPaymentsModule,
237
+ };
238
+ };
239
+ //# sourceMappingURL=configureOrdersModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureOrdersModule.js","sourceRoot":"","sources":["../../src/module/configureOrdersModule.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export { configureOrdersModule } from './module/configureOrdersModule';
2
+ export { orderServices } from './service/orderServices';
3
+ export { OrderStatus } from '@unchainedshop/types/orders';
4
+ export { OrderDeliveryStatus } from '@unchainedshop/types/orders.deliveries';
5
+ export { OrderPaymentStatus } from '@unchainedshop/types/orders.payments';
6
+ export { OrderDiscountAdapter } from './director/OrderDiscountAdapter';
7
+ export { OrderDiscountDirector } from './director/OrderDiscountDirector';
8
+ export { OrderPricingAdapter } from './director/OrderPricingAdapter';
9
+ export { OrderPricingDirector } from './director/OrderPricingDirector';
10
+ export { OrderPricingSheet } from './director/OrderPricingSheet';
11
+ export { ordersSettings } from './orders-settings';
@@ -0,0 +1,12 @@
1
+ export { configureOrdersModule } from './module/configureOrdersModule';
2
+ export { orderServices } from './service/orderServices';
3
+ export { OrderStatus } from '@unchainedshop/types/orders';
4
+ export { OrderDeliveryStatus } from '@unchainedshop/types/orders.deliveries';
5
+ export { OrderPaymentStatus } from '@unchainedshop/types/orders.payments';
6
+ export { OrderDiscountAdapter } from './director/OrderDiscountAdapter';
7
+ export { OrderDiscountDirector } from './director/OrderDiscountDirector';
8
+ export { OrderPricingAdapter } from './director/OrderPricingAdapter';
9
+ export { OrderPricingDirector } from './director/OrderPricingDirector';
10
+ export { OrderPricingSheet } from './director/OrderPricingSheet';
11
+ export { ordersSettings } from './orders-settings';
12
+ //# sourceMappingURL=orders-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orders-index.js","sourceRoot":"","sources":["../src/orders-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE1E,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { generateRandomHash } from '@unchainedshop/utils';
2
+ export declare const defaultValidateOrderPosition: ({ product }: {
3
+ product: any;
4
+ }, { modules }: {
5
+ modules: any;
6
+ }) => void;
7
+ export declare const ordersSettings: {
8
+ ensureUserHasCart: any;
9
+ orderNumberHashFn: any;
10
+ validateOrderPosition: any;
11
+ configureSettings({ ensureUserHasCart, orderNumberHashFn, validateOrderPosition, }?: {
12
+ ensureUserHasCart?: boolean;
13
+ orderNumberHashFn?: typeof generateRandomHash;
14
+ validateOrderPosition?: ({ product }: {
15
+ product: any;
16
+ }, { modules }: {
17
+ modules: any;
18
+ }) => void;
19
+ }): void;
20
+ };
@@ -0,0 +1,17 @@
1
+ import { generateRandomHash } from '@unchainedshop/utils';
2
+ export const defaultValidateOrderPosition = ({ product }, { modules }) => {
3
+ if (!modules.products.isActive(product)) {
4
+ throw new Error('This product is inactive');
5
+ }
6
+ };
7
+ export const ordersSettings = {
8
+ ensureUserHasCart: null,
9
+ orderNumberHashFn: null,
10
+ validateOrderPosition: null,
11
+ configureSettings({ ensureUserHasCart = false, orderNumberHashFn = generateRandomHash, validateOrderPosition = defaultValidateOrderPosition, } = {}) {
12
+ this.ensureUserHasCart = ensureUserHasCart;
13
+ this.orderNumberHashFn = orderNumberHashFn;
14
+ this.validateOrderPosition = validateOrderPosition;
15
+ },
16
+ };
17
+ //# sourceMappingURL=orders-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orders-settings.js","sourceRoot":"","sources":["../src/orders-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACvE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;KAC7C;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,iBAAiB,EAAE,IAAI;IACvB,iBAAiB,EAAE,IAAI;IACvB,qBAAqB,EAAE,IAAI;IAE3B,iBAAiB,CAAC,EAChB,iBAAiB,GAAG,KAAK,EACzB,iBAAiB,GAAG,kBAAkB,EACtC,qBAAqB,GAAG,4BAA4B,GACrD,GAAG,EAAE;QACJ,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;IACrD,CAAC;CACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { CreateUserCartService } from '@unchainedshop/types/orders';
2
+ export declare const createUserCartService: CreateUserCartService;
@@ -0,0 +1,23 @@
1
+ export const createUserCartService = async ({ user, orderNumber, countryCode }, requestContext) => {
2
+ const { countryContext, modules, services } = requestContext;
3
+ const normalizedCountryCode = countryCode || countryContext;
4
+ const currency = await services.countries.resolveDefaultCurrencyCode({
5
+ isoCode: normalizedCountryCode,
6
+ }, requestContext);
7
+ const order = await modules.orders.create({
8
+ orderNumber,
9
+ currency,
10
+ countryCode: normalizedCountryCode,
11
+ billingAddress: user.lastBillingAddress || user.profile?.address,
12
+ contact: user.lastContact ||
13
+ (!user.guest
14
+ ? {
15
+ telNumber: user.profile?.phoneMobile,
16
+ emailAddress: modules.users.primaryEmail(user)?.address,
17
+ }
18
+ : {}),
19
+ }, user._id);
20
+ await modules.orders.initProviders(order, requestContext);
21
+ return order;
22
+ };
23
+ //# sourceMappingURL=createUserCartService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createUserCartService.js","sourceRoot":"","sources":["../../src/service/createUserCartService.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,qBAAqB,GAA0B,KAAK,EAC/D,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,EAClC,cAAc,EACd,EAAE;IACF,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;IAE7D,MAAM,qBAAqB,GAAG,WAAW,IAAI,cAAc,CAAC;IAE5D,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,0BAA0B,CAClE;QACE,OAAO,EAAE,qBAAqB;KAC/B,EACD,cAAc,CACf,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CACvC;QACE,WAAW;QACX,QAAQ;QACR,WAAW,EAAE,qBAAqB;QAClC,cAAc,EAAE,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO;QAChE,OAAO,EACL,IAAI,CAAC,WAAW;YAChB,CAAC,CAAC,IAAI,CAAC,KAAK;gBACV,CAAC,CAAC;oBACE,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW;oBACpC,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,OAAO;iBACxD;gBACH,CAAC,CAAC,EAAE,CAAC;KACV,EACD,IAAI,CAAC,GAAG,CACT,CAAC;IAEF,MAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IAC1D,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { MigrateOrderCartsService } from '@unchainedshop/types/orders';
2
+ export declare const migrateOrderCartsService: MigrateOrderCartsService;
@@ -0,0 +1,10 @@
1
+ export const migrateOrderCartsService = async ({ fromUser, toUser, shouldMerge }, requestContext) => {
2
+ const fromCart = await requestContext.modules.orders.cart({ countryContext: requestContext.countryContext }, fromUser);
3
+ const toCart = await requestContext.modules.orders.cart({ countryContext: requestContext.countryContext }, toUser);
4
+ if (!fromCart) {
5
+ // No cart, don't copy
6
+ return toCart;
7
+ }
8
+ return requestContext.modules.orders.migrateCart({ fromCart, shouldMerge, toCart }, requestContext);
9
+ };
10
+ //# sourceMappingURL=migrateOrderCartService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrateOrderCartService.js","sourceRoot":"","sources":["../../src/service/migrateOrderCartService.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAA6B,KAAK,EACrE,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EACjC,cAAc,EACd,EAAE;IACF,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACvD,EAAE,cAAc,EAAE,cAAc,CAAC,cAAc,EAAE,EACjD,QAAQ,CACT,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CACrD,EAAE,cAAc,EAAE,cAAc,CAAC,cAAc,EAAE,EACjD,MAAM,CACP,CAAC;IAEF,IAAI,CAAC,QAAQ,EAAE;QACb,sBAAsB;QACtB,OAAO,MAAM,CAAC;KACf;IAED,OAAO,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC;AACtG,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { OrderServices } from '@unchainedshop/types/orders';
2
+ export declare const orderServices: OrderServices;
@@ -0,0 +1,7 @@
1
+ import { migrateOrderCartsService } from './migrateOrderCartService';
2
+ import { createUserCartService } from './createUserCartService';
3
+ export const orderServices = {
4
+ migrateOrderCarts: migrateOrderCartsService,
5
+ createUserCart: createUserCartService,
6
+ };
7
+ //# sourceMappingURL=orderServices.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orderServices.js","sourceRoot":"","sources":["../../src/service/orderServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,iBAAiB,EAAE,wBAAwB;IAC3C,cAAc,EAAE,qBAAqB;CACtC,CAAC"}
package/package.js ADDED
@@ -0,0 +1,33 @@
1
+ Package.describe({
2
+ name: 'unchained:core-orders',
3
+ version: '1.1.3',
4
+ summary: 'Unchained Engine Core: Orders',
5
+ git: 'https://github.com/unchainedshop/unchained',
6
+ documentation: 'README.md',
7
+ });
8
+
9
+ Npm.depends({
10
+ 'simpl-schema': '1.12.0',
11
+ '@unchainedshop/logger': '1.1.3',
12
+ '@unchainedshop/utils': '1.1.3',
13
+ // '@unchainedshop/events': '1.1.4', // PEER
14
+ });
15
+
16
+ Package.onUse((api) => {
17
+ api.versionsFrom('2.7.3');
18
+ api.use('ecmascript');
19
+ api.use('typescript');
20
+
21
+ api.mainModule('src/orders-index.ts', 'server');
22
+ });
23
+
24
+ Package.onTest((api) => {
25
+ api.use('meteortesting:mocha');
26
+ api.use('ecmascript');
27
+ api.use('typescript');
28
+
29
+ api.use('unchained:mongodb');
30
+ api.use('unchained:core-orders');
31
+
32
+ api.mainModule('tests/orders-index.test.ts');
33
+ });
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@unchainedshop/core-orders",
3
+ "version": "1.1.3",
4
+ "main": "lib/orders-index.js",
5
+ "types": "lib/orders-index.d.ts",
6
+ "type": "module",
7
+ "scripts": {
8
+ "clean": "rm -rf lib",
9
+ "build": "npm run clean && tsc -p tsconfig.build.json",
10
+ "watch": "tsc --watch",
11
+ "link:core": "npm link @unchainedshop/types",
12
+ "test": "cross-env METEOR_PACKAGE_DIRS=../ TEST_CLIENT=0 TEST_WATCH=1 meteor test-packages ./ --driver-package meteortesting:mocha --port 4200"
13
+ },
14
+ "repository": {
15
+ "type": "git",
16
+ "url": "git+https://github.com/unchainedshop/unchained.git"
17
+ },
18
+ "keywords": [
19
+ "unchained",
20
+ "ecommerce",
21
+ "core"
22
+ ],
23
+ "author": "Joël Meiller",
24
+ "license": "EUPL-1.2",
25
+ "bugs": {
26
+ "url": "https://github.com/unchainedshop/unchained/issues"
27
+ },
28
+ "homepage": "https://github.com/unchainedshop/unchained#readme",
29
+ "dependencies": {
30
+ "@unchainedshop/events": "latest",
31
+ "@unchainedshop/logger": "latest",
32
+ "@unchainedshop/utils": "latest",
33
+ "simpl-schema": "^1.12.2"
34
+ },
35
+ "devDependencies": {
36
+ "@types/chai": "^4.3.1",
37
+ "@types/mocha": "^9.1.1",
38
+ "@unchainedshop/types": "latest",
39
+ "chai": "^4.3.6",
40
+ "cross-env": "^7.0.3",
41
+ "typescript": "^4.7.4"
42
+ }
43
+ }
@@ -0,0 +1,44 @@
1
+ import { IDiscountAdapter } from '@unchainedshop/types/discount';
2
+ import { OrderDiscountDirector, OrderDiscountAdapter } from 'meteor/unchained:core-orders';
3
+
4
+ const HundredOff: IDiscountAdapter = {
5
+ ...OrderDiscountAdapter,
6
+
7
+ key: 'shop.unchained.discount.100-off',
8
+ label: '100 Off',
9
+ version: '1.0',
10
+ orderIndex: 1,
11
+
12
+ // return true if a discount is allowed to get added manually by a user
13
+ isManualAdditionAllowed: async () => {
14
+ return true;
15
+ },
16
+
17
+ // return true if a discount is allowed to get removed manually by a user
18
+ isManualRemovalAllowed: async () => {
19
+ return true;
20
+ },
21
+
22
+ actions: async ({ context }) => ({
23
+ ...(await OrderDiscountAdapter.actions({ context })),
24
+
25
+ isValidForSystemTriggering: async () => {
26
+ return false;
27
+ },
28
+
29
+ isValidForCodeTriggering: async ({ code }) => {
30
+ return code.toUpperCase() === '100OFF';
31
+ },
32
+
33
+ // returns the appropriate discount context for a calculation adapter
34
+ discountForPricingAdapterKey: ({ pricingAdapterKey }) => {
35
+ if (pricingAdapterKey === 'shop.unchained.pricing.order-discount') {
36
+ return { fixedRate: 10000 };
37
+ }
38
+
39
+ return null;
40
+ },
41
+ }),
42
+ };
43
+
44
+ OrderDiscountDirector.registerAdapter(HundredOff);
@@ -0,0 +1,43 @@
1
+ import { IDiscountAdapter } from '@unchainedshop/types/discount';
2
+ import { OrderDiscountDirector, OrderDiscountAdapter } from 'meteor/unchained:core-orders';
3
+
4
+ const HalfPriceManual: IDiscountAdapter = {
5
+ ...OrderDiscountAdapter,
6
+
7
+ key: 'shop.unchained.discount.half-price-manual',
8
+ label: 'Half Price',
9
+ version: '1.0',
10
+ orderIndex: 2,
11
+
12
+ // return true if a discount is allowed to get added manually by a user
13
+ isManualAdditionAllowed: async () => {
14
+ return true;
15
+ },
16
+
17
+ // return true if a discount is allowed to get removed manually by a user
18
+ isManualRemovalAllowed: async () => {
19
+ return true;
20
+ },
21
+
22
+ actions: async ({ context }) => ({
23
+ ...(await OrderDiscountAdapter.actions({ context })),
24
+
25
+ isValidForSystemTriggering: async () => {
26
+ return false;
27
+ },
28
+
29
+ isValidForCodeTriggering: async ({ code }) => {
30
+ return code === 'HALFPRICE';
31
+ },
32
+
33
+ // returns the appropriate discount context for a calculation adapter
34
+ discountForPricingAdapterKey({ pricingAdapterKey }) {
35
+ if (pricingAdapterKey === 'shop.unchained.pricing.product-discount') {
36
+ return { rate: 0.5 };
37
+ }
38
+ return null;
39
+ },
40
+ }),
41
+ };
42
+
43
+ OrderDiscountDirector.registerAdapter(HalfPriceManual);
@@ -0,0 +1,46 @@
1
+ import { IDiscountAdapter } from '@unchainedshop/types/discount';
2
+ import { OrderDiscountDirector, OrderDiscountAdapter } from 'meteor/unchained:director-discounting';
3
+
4
+ const HalfPrice: IDiscountAdapter = {
5
+ ...OrderDiscountAdapter,
6
+
7
+ key: 'shop.unchained.discount.half-price',
8
+ label: 'Half Price',
9
+ version: '1.0',
10
+ orderIndex: 3,
11
+
12
+ // return true if a discount is allowed to get added manually by a user
13
+ isManualAdditionAllowed: async () => {
14
+ return false;
15
+ },
16
+
17
+ // return true if a discount is allowed to get removed manually by a user
18
+ isManualRemovalAllowed: async () => {
19
+ return false;
20
+ },
21
+
22
+ actions: async ({ context }) => ({
23
+ ...(await OrderDiscountAdapter.actions({ context })),
24
+
25
+ isValidForSystemTriggering: async () => {
26
+ const { order } = context;
27
+ const user = await context.modules.users.findUserById(order.userId);
28
+ const isUserEligibleForHalfPrice = user?.tags && user.tags.indexOf('half-price') !== -1;
29
+ return !!isUserEligibleForHalfPrice;
30
+ },
31
+
32
+ isValidForCodeTriggering: async () => {
33
+ return false;
34
+ },
35
+
36
+ // returns the appropriate discount context for a calculation adapter
37
+ discountForPricingAdapterKey({ pricingAdapterKey }) {
38
+ if (pricingAdapterKey === 'shop.unchained.pricing.product-discount') {
39
+ return { rate: 0.5 };
40
+ }
41
+ return null;
42
+ },
43
+ }),
44
+ };
45
+
46
+ OrderDiscountDirector.registerAdapter(HalfPrice);