@things-factory/marketplace-base 3.7.6 → 3.7.10

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 (70) hide show
  1. package/dist-server/entities/index.js +8 -2
  2. package/dist-server/entities/index.js.map +1 -1
  3. package/dist-server/entities/marketplace-order-item.js +4 -0
  4. package/dist-server/entities/marketplace-order-item.js.map +1 -1
  5. package/dist-server/entities/marketplace-order.js +1 -1
  6. package/dist-server/entities/marketplace-order.js.map +1 -1
  7. package/dist-server/entities/marketplace-refund-order-item.js +82 -0
  8. package/dist-server/entities/marketplace-refund-order-item.js.map +1 -0
  9. package/dist-server/entities/marketplace-refund-order.js +77 -0
  10. package/dist-server/entities/marketplace-refund-order.js.map +1 -0
  11. package/dist-server/graphql/resolvers/index.js +2 -0
  12. package/dist-server/graphql/resolvers/index.js.map +1 -1
  13. package/dist-server/graphql/resolvers/marketplace-order/marketplace-orders.js +2 -17
  14. package/dist-server/graphql/resolvers/marketplace-order/marketplace-orders.js.map +1 -1
  15. package/dist-server/graphql/resolvers/marketplace-order/sync-all-marketplace-order.js +25 -7
  16. package/dist-server/graphql/resolvers/marketplace-order/sync-all-marketplace-order.js.map +1 -1
  17. package/dist-server/graphql/resolvers/marketplace-order/sync-marketplace-order.js +6 -3
  18. package/dist-server/graphql/resolvers/marketplace-order/sync-marketplace-order.js.map +1 -1
  19. package/dist-server/graphql/resolvers/marketplace-order-item/marketplace-order-items.js +1 -1
  20. package/dist-server/graphql/resolvers/marketplace-order-item/marketplace-order-items.js.map +1 -1
  21. package/dist-server/graphql/resolvers/marketplace-refund-order/index.js +9 -0
  22. package/dist-server/graphql/resolvers/marketplace-refund-order/index.js.map +1 -0
  23. package/dist-server/graphql/resolvers/marketplace-refund-order/sync-all-marketplace-refund-orders.js +93 -0
  24. package/dist-server/graphql/resolvers/marketplace-refund-order/sync-all-marketplace-refund-orders.js.map +1 -0
  25. package/dist-server/graphql/resolvers/marketplace-refund-order/sync-marketplace-refund-orders.js +79 -0
  26. package/dist-server/graphql/resolvers/marketplace-refund-order/sync-marketplace-refund-orders.js.map +1 -0
  27. package/dist-server/graphql/resolvers/marketplace-report/index.js +8 -0
  28. package/dist-server/graphql/resolvers/marketplace-report/index.js.map +1 -0
  29. package/dist-server/graphql/resolvers/marketplace-report/marketplace-sales-report.js +82 -0
  30. package/dist-server/graphql/resolvers/marketplace-report/marketplace-sales-report.js.map +1 -0
  31. package/dist-server/graphql/types/index.js +2 -0
  32. package/dist-server/graphql/types/index.js.map +1 -1
  33. package/dist-server/graphql/types/marketplace-order-item/marketplace-order-item.js +1 -0
  34. package/dist-server/graphql/types/marketplace-order-item/marketplace-order-item.js.map +1 -1
  35. package/dist-server/graphql/types/marketplace-refund-order/index.js +31 -0
  36. package/dist-server/graphql/types/marketplace-refund-order/index.js.map +1 -0
  37. package/dist-server/graphql/types/marketplace-refund-order/marketplace-refund-order-list.js +14 -0
  38. package/dist-server/graphql/types/marketplace-refund-order/marketplace-refund-order-list.js.map +1 -0
  39. package/dist-server/graphql/types/marketplace-refund-order/marketplace-refund-order.js +23 -0
  40. package/dist-server/graphql/types/marketplace-refund-order/marketplace-refund-order.js.map +1 -0
  41. package/dist-server/graphql/types/marketplace-report/index.js +25 -0
  42. package/dist-server/graphql/types/marketplace-report/index.js.map +1 -0
  43. package/dist-server/graphql/types/marketplace-report/marketplace-sales-report-list.js +14 -0
  44. package/dist-server/graphql/types/marketplace-report/marketplace-sales-report-list.js.map +1 -0
  45. package/dist-server/graphql/types/marketplace-report/marketplace-sales-report.js +35 -0
  46. package/dist-server/graphql/types/marketplace-report/marketplace-sales-report.js.map +1 -0
  47. package/package.json +4 -4
  48. package/server/entities/index.ts +8 -2
  49. package/server/entities/marketplace-order-item.ts +3 -0
  50. package/server/entities/marketplace-order.ts +1 -1
  51. package/server/entities/marketplace-refund-order-item.ts +65 -0
  52. package/server/entities/marketplace-refund-order.ts +62 -0
  53. package/server/graphql/resolvers/index.ts +2 -0
  54. package/server/graphql/resolvers/marketplace-order/marketplace-orders.ts +2 -17
  55. package/server/graphql/resolvers/marketplace-order/sync-all-marketplace-order.ts +36 -15
  56. package/server/graphql/resolvers/marketplace-order/sync-marketplace-order.ts +10 -3
  57. package/server/graphql/resolvers/marketplace-order-item/marketplace-order-items.ts +5 -2
  58. package/server/graphql/resolvers/marketplace-refund-order/index.ts +9 -0
  59. package/server/graphql/resolvers/marketplace-refund-order/sync-all-marketplace-refund-orders.ts +121 -0
  60. package/server/graphql/resolvers/marketplace-refund-order/sync-marketplace-refund-orders.ts +103 -0
  61. package/server/graphql/resolvers/marketplace-report/index.ts +7 -0
  62. package/server/graphql/resolvers/marketplace-report/marketplace-sales-report.ts +100 -0
  63. package/server/graphql/types/index.ts +2 -0
  64. package/server/graphql/types/marketplace-order-item/marketplace-order-item.ts +1 -0
  65. package/server/graphql/types/marketplace-refund-order/index.ts +16 -0
  66. package/server/graphql/types/marketplace-refund-order/marketplace-refund-order-list.ts +8 -0
  67. package/server/graphql/types/marketplace-refund-order/marketplace-refund-order.ts +17 -0
  68. package/server/graphql/types/marketplace-report/index.ts +10 -0
  69. package/server/graphql/types/marketplace-report/marketplace-sales-report-list.ts +8 -0
  70. package/server/graphql/types/marketplace-report/marketplace-sales-report.ts +29 -0
@@ -0,0 +1,62 @@
1
+ import {
2
+ Column,
3
+ CreateDateColumn,
4
+ Entity,
5
+ Index,
6
+ ManyToOne,
7
+ OneToMany,
8
+ PrimaryGeneratedColumn,
9
+ UpdateDateColumn
10
+ } from 'typeorm'
11
+
12
+ import { User } from '@things-factory/auth-base'
13
+ import { MarketplaceRefundOrderItem, MarketplaceOrder } from '../entities'
14
+ import { Domain } from '@things-factory/shell'
15
+
16
+ @Entity()
17
+ @Index(
18
+ 'ix_marketplace-refund-order_0',
19
+ (marketplaceRefundOrder: MarketplaceRefundOrder) => [marketplaceRefundOrder.domain, marketplaceRefundOrder.name],
20
+ { unique: true }
21
+ )
22
+ export class MarketplaceRefundOrder {
23
+ @PrimaryGeneratedColumn('uuid')
24
+ id: string
25
+
26
+ @ManyToOne(type => Domain)
27
+ domain: Domain
28
+
29
+ @Column()
30
+ name: string
31
+
32
+ @OneToMany(type => MarketplaceRefundOrderItem, marketplaceRefundOrderItem => marketplaceRefundOrderItem.marketplaceRefundOrder)
33
+ marketplaceRefundOrderItems: MarketplaceRefundOrderItem[]
34
+
35
+ @Column()
36
+ originalOrderNo: string
37
+
38
+ @Column()
39
+ orderNo: string
40
+
41
+ @Column({ nullable: true, type: 'float' })
42
+ amount: number
43
+
44
+ @Column({ nullable: true })
45
+ status: string
46
+
47
+ @CreateDateColumn()
48
+ createdAt: Date
49
+
50
+ @UpdateDateColumn()
51
+ updatedAt: Date
52
+
53
+ @ManyToOne(type => User, {
54
+ nullable: true
55
+ })
56
+ creator: User
57
+
58
+ @ManyToOne(type => User, {
59
+ nullable: true
60
+ })
61
+ updater: User
62
+ }
@@ -7,5 +7,7 @@ export * from './marketplace-product-category'
7
7
  export * from './marketplace-product-variation'
8
8
  export * from './store-replenishment'
9
9
  export * from './store-replenishment-item'
10
+ export * from './marketplace-refund-order'
11
+ export * from './marketplace-report'
10
12
 
11
13
  export * from './marketplace-product-variation-price'
@@ -6,7 +6,7 @@ import { MarketplaceOrder } from '../../../entities'
6
6
 
7
7
  export const marketplaceOrdersResolver = {
8
8
  async marketplaceOrders(_: any, params: ListParam, context: any) {
9
- let postCodeSorter = params.sortings.filter(sort => sort.name === 'postCode')
9
+ let postCodeSorter = params.sortings.find(sort => sort.name === 'postCode')
10
10
 
11
11
  params.sortings = params.sortings.filter(sort => sort.name !== 'postCode')
12
12
 
@@ -22,26 +22,11 @@ export const marketplaceOrdersResolver = {
22
22
  .leftJoinAndSelect('mo.updater', 'updater')
23
23
 
24
24
  if (postCodeSorter) {
25
- qb.addOrderBy('mos.postCode', postCodeSorter[0]?.desc ? 'DESC' : 'ASC')
25
+ qb.addOrderBy('mos.postCode', postCodeSorter?.desc ? 'DESC' : 'ASC')
26
26
  }
27
27
 
28
28
  let [items, total] = await qb.getManyAndCount()
29
29
 
30
- // const convertedParams = convertListParams(params, context.state.domain.id)
31
- // const [items, total] = await getRepository(MarketplaceOrder).findAndCount({
32
- // ...convertedParams,
33
- // relations: [
34
- // 'domain',
35
- // 'marketplaceStore',
36
- // 'marketplaceOrderItems',
37
- // 'marketplaceOrderItems.marketplaceProductVariation',
38
- // 'marketplaceOrderItems.marketplaceProductVariation.marketplaceProduct',
39
- // 'marketplaceOrderItems.marketplaceOrderShipping',
40
- // 'creator',
41
- // 'updater'
42
- // ]
43
- // })
44
-
45
30
  return { items, total }
46
31
  }
47
32
  }
@@ -92,6 +92,8 @@ export const syncAllMarketplaceOrder = {
92
92
  marketplaceOrder.orderUpdatedAt = order.orderUpdatedAt
93
93
  marketplaceOrder.marketplaceStore = marketplaceStore
94
94
  marketplaceOrder.domain = marketplaceStore.domain
95
+ marketplaceOrder.buyerUsername = order.buyerUsername
96
+ marketplaceOrder.payTime = order.payTime
95
97
 
96
98
  const existingMarketplaceOrder: MarketplaceOrder = await getRepository(MarketplaceOrder).findOne({
97
99
  where: { domain: marketplaceStore.domain, name: order.name },
@@ -174,9 +176,9 @@ export const syncAllMarketplaceOrder = {
174
176
  marketplaceOrder = await getRepository(MarketplaceOrder).save(marketplaceOrder)
175
177
 
176
178
  let savedMarketplaceOrderShipping: MarketplaceOrderShipping = new MarketplaceOrderShipping()
179
+ let savedMarketplaceOrderShippings: MarketplaceOrderShipping[] = []
177
180
 
178
181
  if (order?.orderShipping) {
179
- let savedMarketplaceOrderShippings: MarketplaceOrderShipping[] = []
180
182
  const orderShipping: any = order.orderShipping
181
183
 
182
184
  let marketplaceOrderShipping: MarketplaceOrderShipping = new MarketplaceOrderShipping()
@@ -189,15 +191,20 @@ export const syncAllMarketplaceOrder = {
189
191
  marketplaceOrderShipping.attentionTo = orderShipping.attentionTo
190
192
  marketplaceOrderShipping.city = orderShipping.city
191
193
  marketplaceOrderShipping.country = orderShipping.country
194
+ marketplaceOrderShipping.state = orderShipping?.state || null
192
195
  marketplaceOrderShipping.postCode = orderShipping.postCode
193
196
  marketplaceOrderShipping.phone1 = orderShipping.phone1
194
197
  marketplaceOrderShipping.phone2 = orderShipping.phone2
195
- marketplaceOrderShipping.trackingNo = order?.trackingNo
198
+ marketplaceOrderShipping.trackingNo = order?.trackingNo || null
196
199
  marketplaceOrderShipping.orderNoRef = marketplaceOrder.orderNo
197
200
  marketplaceOrderShipping.subOrderNoRef = marketplaceOrder.orderNo
198
201
  marketplaceOrderShipping.marketplaceStore = marketplaceStore
199
202
  marketplaceOrderShipping.creator = user
200
203
  marketplaceOrderShipping.domain = marketplaceStore.domain
204
+ marketplaceOrderShipping.shippingFee = orderShipping.shippingFee
205
+ marketplaceOrderShipping.actualShippingFee = orderShipping.actualShippingFee
206
+ marketplaceOrderShipping.marketplaceShippingFeeVoucher = orderShipping.marketplaceShippingFeeVoucher
207
+ marketplaceOrderShipping.sellerShippingFeeVoucher = orderShipping.sellerShippingFeeVoucher
201
208
 
202
209
  if (existingMarketplaceOrder) {
203
210
  if (existingMarketplaceOrder.isSplitted) {
@@ -221,7 +228,11 @@ export const syncAllMarketplaceOrder = {
221
228
  postCode: orderShipping.postCode,
222
229
  phone1: orderShipping.phone1,
223
230
  phone2: orderShipping.phone2,
224
- trackingNo: order.trackingNo
231
+ trackingNo: order.trackingNo,
232
+ shippingFee: orderShipping.shippingFee,
233
+ actualShippingFee: orderShipping.actualShippingFee,
234
+ marketplaceShippingFeeVoucher: orderShipping.marketplaceShippingFeeVoucher,
235
+ sellerShippingFeeVoucher: orderShipping.sellerShippingFeeVoucher
225
236
  }
226
237
  })
227
238
 
@@ -229,19 +240,21 @@ export const syncAllMarketplaceOrder = {
229
240
  existingOrderShippings
230
241
  )
231
242
  } else {
232
- let existingOrderShipping: MarketplaceOrderShipping
233
- existingOrderShipping = existingMarketplaceOrder.marketplaceOrderItems[0].marketplaceOrderShipping
234
-
235
- marketplaceOrderShipping = {
236
- ...existingOrderShipping,
237
- ...marketplaceOrderShipping,
238
- trackingNo: order?.trackingNo ? order.trackingNo : existingOrderShipping.trackingNo,
239
- updater: user
240
- }
243
+ if (existingMarketplaceOrder?.marketplaceOrderItems) {
244
+ let existingOrderShipping: MarketplaceOrderShipping
245
+ existingOrderShipping = existingMarketplaceOrder.marketplaceOrderItems[0].marketplaceOrderShipping
246
+
247
+ marketplaceOrderShipping = {
248
+ ...existingOrderShipping,
249
+ ...marketplaceOrderShipping,
250
+ trackingNo: order?.trackingNo ? order.trackingNo : existingOrderShipping.trackingNo,
251
+ updater: user
252
+ }
241
253
 
242
- savedMarketplaceOrderShipping = await getRepository(MarketplaceOrderShipping).save(
243
- marketplaceOrderShipping
244
- )
254
+ savedMarketplaceOrderShipping = await getRepository(MarketplaceOrderShipping).save(
255
+ marketplaceOrderShipping
256
+ )
257
+ }
245
258
  }
246
259
  } else {
247
260
  savedMarketplaceOrderShipping = await getRepository(MarketplaceOrderShipping).save(
@@ -282,7 +295,13 @@ export const syncAllMarketplaceOrder = {
282
295
  marketplaceOrderItem.marketplaceOrder = marketplaceOrder
283
296
  marketplaceOrderItem.trackingCode = order.trackingNo
284
297
  marketplaceOrderItem.marketplaceOrderShipping = savedMarketplaceOrderShipping
298
+ marketplaceOrderItem.originalPrice = item.originalPrice
299
+ marketplaceOrderItem.discount = item.discount
300
+ marketplaceOrderItem.promotionId = item.promotionId
285
301
  marketplaceOrderItem.creator = user
302
+ if (marketplaceStore.platform === 'lazada' && item.paymentFee) {
303
+ marketplaceOrderItem.paymentFee = item.paymentFee
304
+ }
286
305
 
287
306
  marketplaceOrderItems.push({ ...marketplaceOrderItem })
288
307
 
@@ -390,6 +409,8 @@ export const syncAllMarketplaceOrder = {
390
409
 
391
410
  if (more) page++
392
411
  hasMorePage = more
412
+ } else {
413
+ hasMorePage = false
393
414
  }
394
415
  }
395
416
  }
@@ -183,8 +183,8 @@ export const syncMarketplaceOrder = {
183
183
  marketplaceOrderShipping.marketplaceStore = marketplaceStore
184
184
  marketplaceOrderShipping.creator = user
185
185
  marketplaceOrderShipping.domain = marketplaceStore.domain
186
- marketplaceOrderShipping.shippingFee = parseFloat(orderShipping.shippingFee)
187
- marketplaceOrderShipping.actualShippingFee = parseFloat(orderShipping.actualShippingFee)
186
+ marketplaceOrderShipping.shippingFee = orderShipping.shippingFee
187
+ marketplaceOrderShipping.actualShippingFee = orderShipping.actualShippingFee
188
188
  marketplaceOrderShipping.marketplaceShippingFeeVoucher = orderShipping.marketplaceShippingFeeVoucher
189
189
  marketplaceOrderShipping.sellerShippingFeeVoucher = orderShipping.sellerShippingFeeVoucher
190
190
 
@@ -212,7 +212,11 @@ export const syncMarketplaceOrder = {
212
212
  phone1: orderShipping.phone1,
213
213
  phone2: orderShipping.phone2,
214
214
  email: orderShipping?.email,
215
- trackingNo: order.trackingNo
215
+ trackingNo: order.trackingNo,
216
+ shippingFee: orderShipping.shippingFee,
217
+ actualShippingFee: orderShipping.actualShippingFee,
218
+ marketplaceShippingFeeVoucher: orderShipping.marketplaceShippingFeeVoucher,
219
+ sellerShippingFeeVoucher: orderShipping.sellerShippingFeeVoucher
216
220
  }
217
221
  })
218
222
 
@@ -279,6 +283,9 @@ export const syncMarketplaceOrder = {
279
283
  marketplaceOrderItem.discount = item.discount
280
284
  marketplaceOrderItem.promotionId = item.promotionId
281
285
  marketplaceOrderItem.creator = user
286
+ if (marketplaceStore.platform === 'lazada' && item.paymentFee) {
287
+ marketplaceOrderItem.paymentFee = item.paymentFee
288
+ }
282
289
 
283
290
  marketplaceOrderItems.push({ ...marketplaceOrderItem })
284
291
 
@@ -1,5 +1,7 @@
1
- import { ListParam, convertListParams } from '@things-factory/shell'
2
1
  import { getRepository } from 'typeorm'
2
+
3
+ import { convertListParams, ListParam } from '@things-factory/shell'
4
+
3
5
  import { MarketplaceOrderItem } from '../../../entities'
4
6
 
5
7
  export const marketplaceOrderItemsResolver = {
@@ -9,6 +11,7 @@ export const marketplaceOrderItemsResolver = {
9
11
  ...convertedParams,
10
12
  relations: ['domain', 'creator', 'updater']
11
13
  })
14
+
12
15
  return { items, total }
13
16
  }
14
- }
17
+ }
@@ -0,0 +1,9 @@
1
+ import { syncMarketplaceRefundOrders } from './sync-marketplace-refund-orders'
2
+ import { syncAllMarketplaceRefundOrders } from './sync-all-marketplace-refund-orders'
3
+
4
+ export const MarketplaceRefundOrderResolver = {
5
+ Mutation: {
6
+ ...syncMarketplaceRefundOrders,
7
+ ...syncAllMarketplaceRefundOrders
8
+ }
9
+ }
@@ -0,0 +1,121 @@
1
+ import { EntityManager, getRepository } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { MarketplaceStore, StoreAPI } from '@things-factory/integration-marketplace'
5
+ import { Domain } from '@things-factory/shell'
6
+
7
+ import { MarketplaceRefundOrder, MarketplaceRefundOrderItem, MarketplaceProductVariation } from '../../../entities'
8
+
9
+ export const syncAllMarketplaceRefundOrders = {
10
+ async syncAllMarketplaceRefundOrders(_: any, { companyDomainId, fromDate, toDate, blackListStores }, context: any) {
11
+ const { user, tx }: { user: User; tx: EntityManager } = context.state
12
+
13
+ const companyDomain: Domain = await getRepository(Domain).findOne(companyDomainId)
14
+
15
+ // Step 1: get all available marketplace-store
16
+ const marketplaceStores: MarketplaceStore[] = await StoreAPI.getMarketplaceStores(companyDomain)
17
+
18
+ // Step 2: get marketplace refund orders based on each marketplace-store
19
+ if (marketplaceStores?.length === 0) throw new Error('No active marketplace store')
20
+ let whiteListStores: MarketplaceStore[] = marketplaceStores
21
+
22
+ if (blackListStores && blackListStores?.length) {
23
+ whiteListStores = marketplaceStores.filter(store => blackListStores.indexOf(store.name) < 0)
24
+ }
25
+
26
+ for (var i = 0; i < whiteListStores?.length; i++) {
27
+ const marketplaceStore = whiteListStores[i]
28
+ const domain: Domain = marketplaceStore.domain
29
+
30
+ let page: number = 0
31
+ let hasMorePage: boolean = true
32
+ var limit: number = 100
33
+
34
+ while (hasMorePage) {
35
+ const { results: marketplaceRefundOrders, more } = await StoreAPI.getStoreRefundOrders(marketplaceStore, {
36
+ fromDate,
37
+ toDate,
38
+ pagination: { page, limit }
39
+ })
40
+
41
+ if (marketplaceRefundOrders?.length > 0) {
42
+ for (var m = 0; m < marketplaceRefundOrders.length; m++) {
43
+ var refundOrder = marketplaceRefundOrders[i]
44
+
45
+ let marketplaceRefundOrder: MarketplaceRefundOrder = new MarketplaceRefundOrder()
46
+ marketplaceRefundOrder.name = refundOrder.name
47
+ marketplaceRefundOrder.orderNo = refundOrder.orderNo
48
+ marketplaceRefundOrder.amount = refundOrder.amount
49
+ marketplaceRefundOrder.status = refundOrder.status
50
+ marketplaceRefundOrder.originalOrderNo = refundOrder.originalOrderNo
51
+ marketplaceRefundOrder.domain = marketplaceStore.domain
52
+ marketplaceRefundOrder.creator = user
53
+ marketplaceRefundOrder.updater = user
54
+
55
+ const existingRefundOrder: MarketplaceRefundOrder = await getRepository(MarketplaceRefundOrder).findOne({
56
+ where: { domain: marketplaceStore.domain, name: refundOrder.name },
57
+ relations: ['domain', 'marketplaceRefundOrderItems']
58
+ })
59
+
60
+ if (existingRefundOrder) {
61
+ marketplaceRefundOrder = {
62
+ ...existingRefundOrder,
63
+ ...marketplaceRefundOrder,
64
+ updater: user
65
+ }
66
+ }
67
+ marketplaceRefundOrder = await getRepository(MarketplaceRefundOrder).save(marketplaceRefundOrder)
68
+
69
+ refundOrder.items.forEach(async item => {
70
+ let existingVariation: MarketplaceProductVariation = await
71
+ getRepository(MarketplaceProductVariation)
72
+ .findOne({
73
+ where: { domain: marketplaceStore.domain, name: item.variationId }
74
+ })
75
+
76
+ if (marketplaceStore.platform === 'lazada') {
77
+ existingVariation = await getRepository(MarketplaceProductVariation).findOne({
78
+ where: { domain: marketplaceStore.domain, channelSku: item.channelSku }
79
+ })
80
+ }
81
+
82
+ let marketplaceRefundOrderItem: MarketplaceRefundOrderItem = new MarketplaceRefundOrderItem()
83
+
84
+ marketplaceRefundOrderItem.name = item.name
85
+ marketplaceRefundOrderItem.orderItemId = item.orderItemId
86
+ marketplaceRefundOrderItem.price = item.price
87
+ marketplaceRefundOrderItem.qty = item.qty
88
+ marketplaceRefundOrderItem.status = item.status
89
+ marketplaceRefundOrderItem.domain = marketplaceStore.domain
90
+ marketplaceRefundOrderItem.creator = user
91
+ marketplaceRefundOrderItem.updater = user
92
+ marketplaceRefundOrderItem.marketplaceRefundOrder = marketplaceRefundOrder
93
+ marketplaceRefundOrderItem.marketplaceProductVariation = existingVariation
94
+
95
+ const existingRefundOrderItem: MarketplaceRefundOrderItem = await getRepository(
96
+ MarketplaceRefundOrderItem
97
+ ).findOne({
98
+ where: { domain: marketplaceStore.domain, name: item.name },
99
+ relations: ['domain']
100
+ })
101
+ if (existingRefundOrderItem) {
102
+ marketplaceRefundOrderItem = {
103
+ ...existingRefundOrderItem,
104
+ ...marketplaceRefundOrderItem,
105
+ updater: user
106
+ }
107
+ }
108
+
109
+ marketplaceRefundOrderItem = await getRepository(MarketplaceRefundOrderItem).save(
110
+ marketplaceRefundOrderItem
111
+ )
112
+ })
113
+ }
114
+ }
115
+ if (more) page++
116
+ hasMorePage = more
117
+ }
118
+ }
119
+ return true
120
+ }
121
+ }
@@ -0,0 +1,103 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import { User } from '@things-factory/auth-base'
4
+ import { MarketplaceStore, StoreAPI } from '@things-factory/integration-marketplace'
5
+ import { Domain } from '@things-factory/shell'
6
+ import { MarketplaceRefundOrder, MarketplaceRefundOrderItem, MarketplaceProductVariation } from '../../../entities'
7
+
8
+ export const syncMarketplaceRefundOrders = {
9
+ async syncMarketplaceRefundOrders(_: any, { storeId, fromDate, toDate }, context: any) {
10
+
11
+ const { domain, user, tx }: { domain: Domain; user: User; tx: EntityManager } = context.state
12
+
13
+ //@ahmedqaid, I think it would be better if this logic could be written inside a function.
14
+ //That way sync-all-marketplace-refund-orders doesn't need to re-write the logic.
15
+ //By doing so, it would improve readability and maintainability easily.
16
+ const marketplaceStore: MarketplaceStore = await StoreAPI.getMarketplaceStore(storeId)
17
+
18
+ let page: number = 0
19
+ let hasMorePage: boolean = true
20
+ var limit: number = 100
21
+
22
+ while (hasMorePage) {
23
+ const { results: marketplaceRefundOrders, more } = await StoreAPI.getStoreRefundOrders(marketplaceStore, {
24
+ fromDate,
25
+ toDate,
26
+ pagination: { page, limit }
27
+ })
28
+
29
+ for (var i = 0; i < marketplaceRefundOrders.length; i++) {
30
+ var refundOrder = marketplaceRefundOrders[i]
31
+
32
+ let marketplaceRefundOrder: MarketplaceRefundOrder = new MarketplaceRefundOrder()
33
+ marketplaceRefundOrder.name = refundOrder.name
34
+ marketplaceRefundOrder.orderNo = refundOrder.orderNo
35
+ marketplaceRefundOrder.amount = refundOrder.amount
36
+ marketplaceRefundOrder.status = refundOrder.status
37
+ marketplaceRefundOrder.originalOrderNo = refundOrder.originalOrderNo
38
+ marketplaceRefundOrder.domain = marketplaceStore.domain
39
+ marketplaceRefundOrder.creator = user
40
+ marketplaceRefundOrder.updater = user
41
+
42
+ const existingRefundOrder: MarketplaceRefundOrder = await tx.getRepository(MarketplaceRefundOrder).findOne({
43
+ where: { domain: marketplaceStore.domain, name: refundOrder.name },
44
+ relations: ['domain', 'marketplaceRefundOrderItems']
45
+ })
46
+
47
+ if (existingRefundOrder) {
48
+ marketplaceRefundOrder = {
49
+ ...existingRefundOrder,
50
+ ...marketplaceRefundOrder,
51
+ updater: user
52
+ }
53
+ }
54
+ marketplaceRefundOrder = await tx.getRepository(MarketplaceRefundOrder).save(marketplaceRefundOrder)
55
+
56
+ refundOrder.items.forEach(async (item) => {
57
+
58
+ let existingVariation: MarketplaceProductVariation = await tx.getRepository(MarketplaceProductVariation).findOne({
59
+ where: { domain: marketplaceStore.domain, name: item.variationId }
60
+ })
61
+
62
+ if (marketplaceStore.platform === 'lazada') {
63
+ existingVariation = await tx.getRepository(MarketplaceProductVariation).findOne({
64
+ where: { domain: marketplaceStore.domain, channelSku: item.channelSku }
65
+ })
66
+ }
67
+
68
+ let marketplaceRefundOrderItem: MarketplaceRefundOrderItem = new MarketplaceRefundOrderItem()
69
+
70
+ marketplaceRefundOrderItem.name = item.name
71
+ marketplaceRefundOrderItem.orderItemId = item.orderItemId
72
+ marketplaceRefundOrderItem.price = item.price
73
+ marketplaceRefundOrderItem.qty = item.qty
74
+ marketplaceRefundOrderItem.status = item.status
75
+ marketplaceRefundOrderItem.domain = marketplaceStore.domain
76
+ marketplaceRefundOrderItem.creator = user
77
+ marketplaceRefundOrderItem.updater = user
78
+ marketplaceRefundOrderItem.marketplaceRefundOrder = marketplaceRefundOrder
79
+ marketplaceRefundOrderItem.marketplaceProductVariation = existingVariation
80
+
81
+ const existingRefundOrderItem: MarketplaceRefundOrderItem = await tx
82
+ .getRepository(MarketplaceRefundOrderItem)
83
+ .findOne({
84
+ where: { domain: marketplaceStore.domain, name: item.name },
85
+ relations: ['domain']
86
+ })
87
+ if (existingRefundOrderItem) {
88
+ marketplaceRefundOrderItem = {
89
+ ...existingRefundOrderItem,
90
+ ...marketplaceRefundOrderItem,
91
+ updater: user
92
+ }
93
+ }
94
+
95
+ marketplaceRefundOrderItem = await tx.getRepository(MarketplaceRefundOrderItem).save(marketplaceRefundOrderItem)
96
+ })
97
+ }
98
+
99
+ if (more) page++
100
+ hasMorePage = more
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,7 @@
1
+ import { marketplaceSalesReportsResolver } from './marketplace-sales-report'
2
+
3
+ export const MarketplaceReportResolver = {
4
+ Query: {
5
+ ...marketplaceSalesReportsResolver
6
+ }
7
+ }
@@ -0,0 +1,100 @@
1
+ import { getRepository, SelectQueryBuilder } from 'typeorm'
2
+
3
+ import { buildQuery, ListParam } from '@things-factory/shell'
4
+
5
+ import { MarketplaceOrderItem } from '../../../entities'
6
+
7
+ export const marketplaceSalesReportsResolver = {
8
+ async marketplaceSalesReports(_: any, params: ListParam, context: any) {
9
+ const { page, limit } = params.pagination
10
+
11
+ let marketplaceStoreSorter = params.sortings.find(sort => sort.name === 'marketplaceStore')
12
+ let orderNoSorter = params.sortings.find(sort => sort.name === 'orderNo')
13
+
14
+ let platformFilter = params.filters.find(filter => filter.name === 'platform')
15
+ let marketplaceStoreFilter = params.filters.find(filter => filter.name === 'marketplaceStoreId')
16
+ let fromDateFilter = params.filters.find(filter => filter.name === 'fromDate')
17
+ let toDateFilter = params.filters.find(filter => filter.name === 'toDate')
18
+
19
+ params.sortings = params.sortings.filter(sort => ['marketplaceStore', 'orderNo'].indexOf(sort.name) == -1)
20
+ params.filters = params.filters.filter(
21
+ filter => ['platform', 'marketplaceStoreId', 'fromDate', 'toDate'].indexOf(filter.name) == -1
22
+ )
23
+
24
+ let qb: SelectQueryBuilder<MarketplaceOrderItem> = getRepository(MarketplaceOrderItem).createQueryBuilder('moi')
25
+ buildQuery(qb, params, context)
26
+ qb.leftJoinAndSelect('moi.domain', 'domain')
27
+ .leftJoinAndSelect('moi.marketplaceOrderShipping', 'mos')
28
+ .leftJoinAndSelect('moi.marketplaceOrder', 'mo')
29
+ .leftJoinAndSelect('mo.marketplaceStore', 'ms')
30
+ .leftJoinAndSelect('moi.marketplaceProductVariation', 'mpv')
31
+ .leftJoinAndSelect('mpv.marketplaceProduct', 'mp')
32
+ .leftJoinAndSelect('moi.creator', 'creator')
33
+ .leftJoinAndSelect('moi.updater', 'updater')
34
+ .leftJoinAndSelect(
35
+ 'marketplace_refund_orders',
36
+ 'mro',
37
+ 'mo.name = mro.original_order_no AND mo.domain_id = mro.domain_id'
38
+ )
39
+
40
+ if (marketplaceStoreSorter) {
41
+ qb.addOrderBy('ms.name', marketplaceStoreSorter.desc ? 'DESC' : 'ASC')
42
+ }
43
+
44
+ if (orderNoSorter) {
45
+ qb.addOrderBy('mo.name', orderNoSorter.desc ? 'DESC' : 'ASC')
46
+ }
47
+
48
+ if (platformFilter) {
49
+ qb.andWhere('ms.platform = :platform', { platform: platformFilter.value })
50
+ }
51
+
52
+ if (marketplaceStoreFilter) {
53
+ qb.andWhere('ms.id = :marketplaceStore', { marketplaceStore: marketplaceStoreFilter.value })
54
+ }
55
+
56
+ if (fromDateFilter && toDateFilter) {
57
+ qb.andWhere('mo.order_created_at BETWEEN :fromDate AND :toDate', {
58
+ fromDate: fromDateFilter.value,
59
+ toDate: toDateFilter.value
60
+ })
61
+ }
62
+
63
+ let items = await qb
64
+ .offset((page - 1) * limit)
65
+ .limit(limit)
66
+ .getRawMany()
67
+
68
+ const total = await qb.getCount()
69
+
70
+ items = items.map(item => {
71
+ return {
72
+ orderNo: item.mo_name,
73
+ orderCreatedAt: item.mo_order_created_at,
74
+ buyerUsername: item.mo_buyer_username,
75
+ payTime: item.mo_pay_time,
76
+ totalAmount: item.mo_total_amount,
77
+ refundAmount: item.mro_amount,
78
+ shippingProvider: item.mo_shipping_provider,
79
+ storeName: item.ms_name,
80
+ storeDescription: item.ms_description,
81
+ promotionId: item.moi_promotion_id,
82
+ originalPrice: item.moi_original_price,
83
+ paidPrice: item.moi_paid_price,
84
+ sku: item.mpv_name,
85
+ qty: item.moi_qty,
86
+ variationSku: item.mpv_variation_sku,
87
+ productName: item.mp_name,
88
+ productSku: item.mp_isku,
89
+ productDiscount: item.moi_discount,
90
+ paymentFee: item.moi_payment_fee,
91
+ shippingFee: item.mos_shipping_fee,
92
+ actualShippingFee: item.mos_actual_shipping_fee,
93
+ marketplaceShippingFeeVoucher: item.mos_marketplace_shipping_fee_voucher,
94
+ sellerShippingFeeVoucher: item.mos_seller_shipping_fee_voucher
95
+ }
96
+ })
97
+
98
+ return { items, total }
99
+ }
100
+ }
@@ -8,3 +8,5 @@ export * from './marketplace-product-variation'
8
8
  export * from './store-replenishment'
9
9
  export * from './store-replenishment-item'
10
10
  export * from './marketplace-product-variation-price'
11
+ export * from './marketplace-refund-order'
12
+ export * from './marketplace-report'
@@ -23,6 +23,7 @@ export const MarketplaceOrderItem = gql`
23
23
  originalPrice: Float
24
24
  discount: Float
25
25
  promotionId: String
26
+ paymentFee: Float
26
27
  updater: User
27
28
  creator: User
28
29
  updatedAt: String
@@ -0,0 +1,16 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export * from './marketplace-refund-order'
4
+ export * from './marketplace-refund-order-list'
5
+
6
+ export const MarketplaceRefundOrderResolver = gql`
7
+ extend type Mutation {
8
+ syncMarketplaceRefundOrders(storeId: String!, fromDate: String, toDate: String): Boolean @transaction
9
+ syncAllMarketplaceRefundOrders(
10
+ companyDomainId: String
11
+ fromDate: String
12
+ toDate: String
13
+ blackListStores: [String]
14
+ ): Boolean
15
+ }
16
+ `
@@ -0,0 +1,8 @@
1
+ import gql from 'graphql-tag'
2
+
3
+ export const MarketplaceRefundOrderList = gql`
4
+ type MarketplaceRefundOrderList {
5
+ items: [MarketplaceRefundOrder]
6
+ total: Int
7
+ }
8
+ `