@things-factory/operato-mms 4.3.587 → 4.3.591

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.
@@ -11,7 +11,6 @@ import {
11
11
  } from '@things-factory/marketplace-base'
12
12
  import { Product, ProductBundle } from '@things-factory/product-base'
13
13
  import { Domain } from '@things-factory/shell'
14
-
15
14
  export const autoAddReleaseOrderResolver = {
16
15
  async autoAddReleaseOrder(_: void, { warehouseId }: { warehouseId: string }, context: any): Promise<void> {
17
16
  const { domain }: { domain: Domain } = context.state
@@ -40,169 +39,206 @@ export const autoAddReleaseOrderResolver = {
40
39
  customerBizplace => customerBizplace.company.domain.id === domain.id
41
40
  ).id
42
41
 
43
- for (var i = 0; i < marketplaceOrders.length; i++) {
44
- const marketplaceOrder = marketplaceOrders[i]
45
-
46
- const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
42
+ try {
43
+ for (var i = 0; i < marketplaceOrders.length; i++) {
44
+ const marketplaceOrder = marketplaceOrders[i]
45
+
46
+ const marketplaceOrderItems: MarketplaceOrderItem[] = marketplaceOrder.marketplaceOrderItems
47
+
48
+ const qt: SelectQueryBuilder<MarketplaceOrderShipping> = createQueryBuilder(MarketplaceOrderShipping, 'MOS')
49
+ const marketplaceOrderShippings: MarketplaceOrderShipping[] = await qt
50
+ .leftJoinAndSelect('MOS.marketplaceOrderShippingItems', 'MOSI')
51
+ .leftJoinAndSelect('MOSI.product', 'P')
52
+ .leftJoinAndSelect('MOSI.marketplaceOrderItem', 'MOI')
53
+ .where('MOS.domain = :domainId', { domainId: domain.id })
54
+ .andWhere('MOS.orderNoRef = :orderNoRef', { orderNoRef: marketplaceOrder.orderNo })
55
+ .andWhere('MOS.releaseOrderId IS NULL')
56
+ .distinctOn(['MOS.subOrderNoRef', 'MOS.orderNoRef'])
57
+ .orderBy('MOS.subOrderNoRef', 'ASC')
58
+ .addOrderBy('MOS.orderNoRef', 'ASC')
59
+ .addOrderBy('MOS.createdAt', 'ASC')
60
+ .getMany()
61
+
62
+ for (let j = 0; j < marketplaceOrderShippings.length; j++) {
63
+ let marketplaceOrderShipping: MarketplaceOrderShipping = marketplaceOrderShippings[j]
64
+ let marketplaceOrderShippingItems: MarketplaceOrderShippingItem[] =
65
+ marketplaceOrderShipping.marketplaceOrderShippingItems
66
+
67
+ if (!marketplaceOrderShipping?.releaseOrderId) {
68
+ const date: Date = new Date()
69
+ const releaseDate = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date
70
+ .getDate()
71
+ .toString()
72
+ .padStart(2, '0')}`
73
+
74
+ var newReleaseOrder: any = {
75
+ releaseDate,
76
+ type: 'b2c',
77
+ source: ApplicationType.MMS,
78
+ transporter: marketplaceOrder.shippingProvider,
79
+ trackingNo: marketplaceOrderShipping?.ownTrackingNo
80
+ ? marketplaceOrderShipping.ownTrackingNo
81
+ : marketplaceOrderShipping.trackingNo,
82
+ packingOption: true,
83
+ exportOption: false,
84
+ ownTransport: true,
85
+ courierOption: true,
86
+ lmdOption: marketplaceOrder?.marketplaceStore?.lmdOption || false,
87
+ collectionOrderNo: marketplaceOrder.orderNo,
88
+ refNo: marketplaceOrder.orderNo,
89
+ refNo2:
90
+ marketplaceOrderShippings.length > 1
91
+ ? marketplaceOrderShipping?.subOrderNoRef
92
+ : marketplaceOrder.orderNo,
93
+ deliverTo: {
94
+ deliveryAddress1: marketplaceOrderShipping.address1,
95
+ deliveryAddress2: marketplaceOrderShipping.address2,
96
+ deliveryAddress3: marketplaceOrderShipping.address3,
97
+ deliveryAddress4: marketplaceOrderShipping.address4,
98
+ deliveryAddress5: marketplaceOrderShipping.address5,
99
+ attentionTo: marketplaceOrderShipping.attentionTo,
100
+ city: marketplaceOrderShipping.city,
101
+ postalCode: marketplaceOrderShipping.postCode,
102
+ country: marketplaceOrderShipping.country,
103
+ state: marketplaceOrderShipping.state,
104
+ phone1: marketplaceOrderShipping.phone1,
105
+ phone2: marketplaceOrderShipping?.phone2 ? marketplaceOrderShipping.phone2 : null
106
+ },
107
+ marketplaceOrderStatus: marketplaceOrder.status,
108
+ airwayBill: marketplaceOrderShipping?.airwayBill ? marketplaceOrderShipping.airwayBill : null,
109
+ invoice: marketplaceOrderShipping?.invoice ? marketplaceOrderShipping.invoice : null,
110
+ orderInventories: marketplaceOrderShippingItems.map(marketplaceOrderShippingItem => {
111
+ return {
112
+ product: {
113
+ sku: marketplaceOrderShippingItem.product.sku
114
+ },
115
+ releaseQty: marketplaceOrderShippingItem.qty
116
+ }
117
+ })
118
+ }
47
119
 
48
- const marketplaceOrderShippings: MarketplaceOrderShipping[] = await getRepository(MarketplaceOrderShipping).find({
49
- where: { orderNoRef: marketplaceOrder.orderNo, domain },
50
- order: { subOrderNoRef: 'ASC' },
51
- relations: [
52
- 'marketplaceOrderShippingItems',
53
- 'marketplaceOrderShippingItems.marketplaceOrderItem',
54
- 'marketplaceOrderShippingItems.product'
55
- ]
56
- })
120
+ try {
121
+ let releaseOrder: any = await FulfillmentAPI.createOutboundOrder(fulfilmentCenter, {
122
+ customerBizplaceId,
123
+ releaseOrder: newReleaseOrder
124
+ })
57
125
 
58
- for (let j = 0; j < marketplaceOrderShippings.length; j++) {
59
- let marketplaceOrderShipping: MarketplaceOrderShipping = marketplaceOrderShippings[j]
60
- let marketplaceOrderShippingItems: MarketplaceOrderShippingItem[] =
61
- marketplaceOrderShipping.marketplaceOrderShippingItems
62
-
63
- if (!marketplaceOrderShipping?.releaseOrderId) {
64
- const date: Date = new Date()
65
- const releaseDate = `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}-${date
66
- .getDate()
67
- .toString()
68
- .padStart(2, '0')}`
69
-
70
- var newReleaseOrder: any = {
71
- releaseDate,
72
- type: 'b2c',
73
- source: ApplicationType.MMS,
74
- transporter: marketplaceOrder.shippingProvider,
75
- trackingNo: marketplaceOrderShipping?.ownTrackingNo
76
- ? marketplaceOrderShipping.ownTrackingNo
77
- : marketplaceOrderShipping.trackingNo,
78
- packingOption: true,
79
- exportOption: false,
80
- ownTransport: true,
81
- courierOption: true,
82
- lmdOption: marketplaceOrder?.marketplaceStore?.lmdOption || false,
83
- collectionOrderNo: marketplaceOrder.orderNo,
84
- refNo: marketplaceOrder.orderNo,
85
- refNo2:
86
- marketplaceOrderShippings.length > 1 ? marketplaceOrderShipping?.subOrderNoRef : marketplaceOrder.orderNo,
87
- deliverTo: {
88
- deliveryAddress1: marketplaceOrderShipping.address1,
89
- deliveryAddress2: marketplaceOrderShipping.address2,
90
- deliveryAddress3: marketplaceOrderShipping.address3,
91
- deliveryAddress4: marketplaceOrderShipping.address4,
92
- deliveryAddress5: marketplaceOrderShipping.address5,
93
- attentionTo: marketplaceOrderShipping.attentionTo,
94
- city: marketplaceOrderShipping.city,
95
- postalCode: marketplaceOrderShipping.postCode,
96
- country: marketplaceOrderShipping.country,
97
- state: marketplaceOrderShipping.state,
98
- phone1: marketplaceOrderShipping.phone1,
99
- phone2: marketplaceOrderShipping?.phone2 ? marketplaceOrderShipping.phone2 : null
100
- },
101
- marketplaceOrderStatus: marketplaceOrder.status,
102
- airwayBill: marketplaceOrderShipping?.airwayBill ? marketplaceOrderShipping.airwayBill : null,
103
- invoice: marketplaceOrderShipping?.invoice ? marketplaceOrderShipping.invoice : null,
104
- orderInventories: marketplaceOrderShippingItems.map(marketplaceOrderShippingItem => {
105
- return {
106
- product: {
107
- sku: marketplaceOrderShippingItem.product.sku
108
- },
109
- releaseQty: marketplaceOrderShippingItem.qty
126
+ //if release order is not created, throw error
127
+ if (!releaseOrder?.id) {
128
+ throw new Error('Failed to create release order')
110
129
  }
111
- })
112
- }
113
-
114
- try {
115
- var releaseOrder: any = await FulfillmentAPI.createOutboundOrder(fulfilmentCenter, {
116
- customerBizplaceId,
117
- releaseOrder: newReleaseOrder
118
- })
119
130
 
120
- marketplaceOrderShipping.releaseOrderId = releaseOrder.id
121
- marketplaceOrderShipping.fulfillmentCenter = fulfilmentCenter
122
- await getRepository(MarketplaceOrderShipping).save(marketplaceOrderShipping)
123
-
124
- if (releaseOrder && releaseOrder?.id) {
125
- marketplaceOrder.releaseOrderId = releaseOrder.id
126
- marketplaceOrder.fulfillmentCenter = fulfilmentCenter
127
- await getRepository(MarketplaceOrder).save(marketplaceOrder)
131
+ marketplaceOrderShipping.releaseOrderId = releaseOrder.id
132
+ marketplaceOrderShipping.fulfillmentCenter = fulfilmentCenter
133
+ await getRepository(MarketplaceOrderShipping).save(marketplaceOrderShipping)
134
+ } catch (e) {
135
+ console.error(e)
128
136
  }
129
- } catch (e) {}
137
+ }
130
138
  }
131
- }
132
139
 
133
- var invoiceProducts = await Promise.all(
134
- marketplaceOrderItems.map(async mi => {
135
- let product: Product = await getRepository(Product).findOne({
136
- where: { domain, sku: mi.marketplaceProductVariation.sku }
140
+ //fetch the latest updated of marketplaceOrderShipping
141
+ const marketplaceOrderShipping: MarketplaceOrderShipping = await qt
142
+ .where('MOS.domain = :domainId', { domainId: domain.id })
143
+ .andWhere('MOS.orderNoRef = :orderNoRef', { orderNoRef: marketplaceOrder.orderNo })
144
+ .distinctOn(['MOS.subOrderNoRef', 'MOS.orderNoRef'])
145
+ .orderBy('MOS.subOrderNoRef', 'ASC')
146
+ .addOrderBy('MOS.orderNoRef', 'ASC')
147
+ .addOrderBy('MOS.createdAt', 'ASC')
148
+ .getMany()
149
+
150
+ //validation to prevent creating invoice if there is any failed release order
151
+ if (marketplaceOrderShipping.some(mos => mos.releaseOrderId === null || mos.releaseOrderId === '')) {
152
+ continue
153
+ }
154
+
155
+ //update marketplaceOrder with releaseOrderId if all ro is created
156
+ if (marketplaceOrderShipping.length > 0 && marketplaceOrderShipping[0]?.releaseOrderId) {
157
+ await getRepository(MarketplaceOrder).update(marketplaceOrder.id, {
158
+ releaseOrderId: marketplaceOrderShipping[0].releaseOrderId,
159
+ fulfillmentCenter: fulfilmentCenter
137
160
  })
161
+ }
138
162
 
139
- let productBundle: ProductBundle
140
- if (!product) {
141
- productBundle = await getRepository(ProductBundle).findOne({
142
- where: { domain, sku: mi.marketplaceProductVariation.sku }
163
+ try {
164
+ var invoiceProducts = await Promise.all(
165
+ marketplaceOrderItems.map(async mi => {
166
+ let product: Product = await getRepository(Product).findOne({
167
+ where: { domain, sku: mi.marketplaceProductVariation.sku }
168
+ })
169
+
170
+ let productBundle: ProductBundle
171
+ if (!product) {
172
+ productBundle = await getRepository(ProductBundle).findOne({
173
+ where: { domain, sku: mi.marketplaceProductVariation.sku }
174
+ })
175
+ }
176
+
177
+ return {
178
+ sku: product ? product.sku : productBundle.sku,
179
+ name: product ? product.name : productBundle.name,
180
+ description: product ? product.description : productBundle.description,
181
+ qty: mi.qty,
182
+ unitPrice: (mi?.originalPrice || 0) / mi.qty,
183
+ paidPrice: (mi?.paidPrice || 0) / mi.qty,
184
+ discount: mi?.discount || 0,
185
+ shippingFeePaidByCustomer: mi?.shippingFeePaidByCustomer || 0
186
+ }
143
187
  })
188
+ )
189
+
190
+ let newInvoice = {
191
+ invoiceProducts,
192
+ name: '-',
193
+ refNo1: newReleaseOrder.refNo.toString(),
194
+ refNo2: newReleaseOrder.refNo2.toString(),
195
+ issuedOn: new Date(),
196
+ from: marketplaceOrder.marketplaceStore.storeName,
197
+ fromContactPhone: '-',
198
+ fromAddress1: '-',
199
+ fromAddress2: null,
200
+ fromAddress3: null,
201
+ fromAddress4: null,
202
+ fromAddress5: null,
203
+ fromPostcode: null,
204
+ fromCity: null,
205
+ fromState: null,
206
+ fromCountry: null,
207
+ deliverTo: newReleaseOrder.deliverTo.attentionTo || '-',
208
+ deliverToPhone: newReleaseOrder.deliverTo.phone1 || '-',
209
+ deliveryAddress1: newReleaseOrder.deliverTo.deliveryAddress1 || '-',
210
+ deliveryAddress2: newReleaseOrder.deliverTo.deliveryAddress2,
211
+ deliveryAddress3: newReleaseOrder.deliverTo.deliveryAddress3,
212
+ deliveryAddress4: newReleaseOrder.deliverTo.deliveryAddress4,
213
+ deliveryAddress5: newReleaseOrder.deliverTo.deliveryAddress5,
214
+ deliveryPostcode: newReleaseOrder.deliverTo.postalCode || '-',
215
+ deliveryCity: newReleaseOrder.deliverTo.city || '-',
216
+ deliveryState: newReleaseOrder.deliverTo.state || '-',
217
+ deliveryCountry: newReleaseOrder.deliverTo.country || '-',
218
+ billTo: newReleaseOrder.deliverTo.attentionTo || '-',
219
+ billToPhone: newReleaseOrder.deliverTo.phone1 || '-',
220
+ billingAddress1:
221
+ newReleaseOrder.deliverTo.billingAddress || newReleaseOrder.deliverTo.deliveryAddress1 || '-',
222
+ billingAddress2: null,
223
+ billingAddress3: null,
224
+ billingAddress4: null,
225
+ billingAddress5: null,
226
+ billingPostcode: '-',
227
+ billingCity: '-',
228
+ billingState: '-',
229
+ billingCountry: '-'
144
230
  }
145
231
 
146
- return {
147
- sku: product ? product.sku : productBundle.sku,
148
- name: product ? product.name : productBundle.name,
149
- description: product ? product.description : productBundle.description,
150
- qty: mi.qty,
151
- unitPrice: (mi?.originalPrice || 0) / mi.qty,
152
- paidPrice: (mi?.paidPrice || 0) / mi.qty,
153
- discount: mi?.discount || 0,
154
- shippingFeePaidByCustomer: mi?.shippingFeePaidByCustomer || 0
155
- }
156
- })
157
- )
158
-
159
- let newInvoice = {
160
- invoiceProducts,
161
- name: '-',
162
- refNo1: newReleaseOrder.refNo.toString(),
163
- refNo2: newReleaseOrder.refNo2.toString(),
164
- issuedOn: new Date(),
165
- from: marketplaceOrder.marketplaceStore.storeName,
166
- fromContactPhone: '-',
167
- fromAddress1: '-',
168
- fromAddress2: null,
169
- fromAddress3: null,
170
- fromAddress4: null,
171
- fromAddress5: null,
172
- fromPostcode: null,
173
- fromCity: null,
174
- fromState: null,
175
- fromCountry: null,
176
- deliverTo: newReleaseOrder.deliverTo.attentionTo || '-',
177
- deliverToPhone: newReleaseOrder.deliverTo.phone1 || '-',
178
- deliveryAddress1: newReleaseOrder.deliverTo.deliveryAddress1 || '-',
179
- deliveryAddress2: newReleaseOrder.deliverTo.deliveryAddress2,
180
- deliveryAddress3: newReleaseOrder.deliverTo.deliveryAddress3,
181
- deliveryAddress4: newReleaseOrder.deliverTo.deliveryAddress4,
182
- deliveryAddress5: newReleaseOrder.deliverTo.deliveryAddress5,
183
- deliveryPostcode: newReleaseOrder.deliverTo.postalCode || '-',
184
- deliveryCity: newReleaseOrder.deliverTo.city || '-',
185
- deliveryState: newReleaseOrder.deliverTo.state || '-',
186
- deliveryCountry: newReleaseOrder.deliverTo.country || '-',
187
- billTo: newReleaseOrder.deliverTo.attentionTo || '-',
188
- billToPhone: newReleaseOrder.deliverTo.phone1 || '-',
189
- billingAddress1: newReleaseOrder.deliverTo.billingAddress || newReleaseOrder.deliverTo.deliveryAddress1 || '-',
190
- billingAddress2: null,
191
- billingAddress3: null,
192
- billingAddress4: null,
193
- billingAddress5: null,
194
- billingPostcode: '-',
195
- billingCity: '-',
196
- billingState: '-',
197
- billingCountry: '-'
232
+ await FulfillmentAPI.createSalesInvoice(fulfilmentCenter, {
233
+ customerBizplaceId,
234
+ invoice: newInvoice
235
+ })
236
+ } catch (e) {
237
+ console.error(e)
238
+ }
198
239
  }
199
-
200
- try {
201
- await FulfillmentAPI.createSalesInvoice(fulfilmentCenter, {
202
- customerBizplaceId,
203
- invoice: newInvoice
204
- })
205
- } catch (e) {}
240
+ } catch (e) {
241
+ console.error(e)
206
242
  }
207
243
  }
208
244
  }