@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.
- package/dist-server/entities/index.js +8 -2
- package/dist-server/entities/index.js.map +1 -1
- package/dist-server/entities/marketplace-order-item.js +4 -0
- package/dist-server/entities/marketplace-order-item.js.map +1 -1
- package/dist-server/entities/marketplace-order.js +1 -1
- package/dist-server/entities/marketplace-order.js.map +1 -1
- package/dist-server/entities/marketplace-refund-order-item.js +82 -0
- package/dist-server/entities/marketplace-refund-order-item.js.map +1 -0
- package/dist-server/entities/marketplace-refund-order.js +77 -0
- package/dist-server/entities/marketplace-refund-order.js.map +1 -0
- package/dist-server/graphql/resolvers/index.js +2 -0
- package/dist-server/graphql/resolvers/index.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-order/marketplace-orders.js +2 -17
- package/dist-server/graphql/resolvers/marketplace-order/marketplace-orders.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-order/sync-all-marketplace-order.js +25 -7
- package/dist-server/graphql/resolvers/marketplace-order/sync-all-marketplace-order.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-order/sync-marketplace-order.js +6 -3
- package/dist-server/graphql/resolvers/marketplace-order/sync-marketplace-order.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-order-item/marketplace-order-items.js +1 -1
- package/dist-server/graphql/resolvers/marketplace-order-item/marketplace-order-items.js.map +1 -1
- package/dist-server/graphql/resolvers/marketplace-refund-order/index.js +9 -0
- package/dist-server/graphql/resolvers/marketplace-refund-order/index.js.map +1 -0
- package/dist-server/graphql/resolvers/marketplace-refund-order/sync-all-marketplace-refund-orders.js +93 -0
- package/dist-server/graphql/resolvers/marketplace-refund-order/sync-all-marketplace-refund-orders.js.map +1 -0
- package/dist-server/graphql/resolvers/marketplace-refund-order/sync-marketplace-refund-orders.js +79 -0
- package/dist-server/graphql/resolvers/marketplace-refund-order/sync-marketplace-refund-orders.js.map +1 -0
- package/dist-server/graphql/resolvers/marketplace-report/index.js +8 -0
- package/dist-server/graphql/resolvers/marketplace-report/index.js.map +1 -0
- package/dist-server/graphql/resolvers/marketplace-report/marketplace-sales-report.js +82 -0
- package/dist-server/graphql/resolvers/marketplace-report/marketplace-sales-report.js.map +1 -0
- package/dist-server/graphql/types/index.js +2 -0
- package/dist-server/graphql/types/index.js.map +1 -1
- package/dist-server/graphql/types/marketplace-order-item/marketplace-order-item.js +1 -0
- package/dist-server/graphql/types/marketplace-order-item/marketplace-order-item.js.map +1 -1
- package/dist-server/graphql/types/marketplace-refund-order/index.js +31 -0
- package/dist-server/graphql/types/marketplace-refund-order/index.js.map +1 -0
- package/dist-server/graphql/types/marketplace-refund-order/marketplace-refund-order-list.js +14 -0
- package/dist-server/graphql/types/marketplace-refund-order/marketplace-refund-order-list.js.map +1 -0
- package/dist-server/graphql/types/marketplace-refund-order/marketplace-refund-order.js +23 -0
- package/dist-server/graphql/types/marketplace-refund-order/marketplace-refund-order.js.map +1 -0
- package/dist-server/graphql/types/marketplace-report/index.js +25 -0
- package/dist-server/graphql/types/marketplace-report/index.js.map +1 -0
- package/dist-server/graphql/types/marketplace-report/marketplace-sales-report-list.js +14 -0
- package/dist-server/graphql/types/marketplace-report/marketplace-sales-report-list.js.map +1 -0
- package/dist-server/graphql/types/marketplace-report/marketplace-sales-report.js +35 -0
- package/dist-server/graphql/types/marketplace-report/marketplace-sales-report.js.map +1 -0
- package/package.json +4 -4
- package/server/entities/index.ts +8 -2
- package/server/entities/marketplace-order-item.ts +3 -0
- package/server/entities/marketplace-order.ts +1 -1
- package/server/entities/marketplace-refund-order-item.ts +65 -0
- package/server/entities/marketplace-refund-order.ts +62 -0
- package/server/graphql/resolvers/index.ts +2 -0
- package/server/graphql/resolvers/marketplace-order/marketplace-orders.ts +2 -17
- package/server/graphql/resolvers/marketplace-order/sync-all-marketplace-order.ts +36 -15
- package/server/graphql/resolvers/marketplace-order/sync-marketplace-order.ts +10 -3
- package/server/graphql/resolvers/marketplace-order-item/marketplace-order-items.ts +5 -2
- package/server/graphql/resolvers/marketplace-refund-order/index.ts +9 -0
- package/server/graphql/resolvers/marketplace-refund-order/sync-all-marketplace-refund-orders.ts +121 -0
- package/server/graphql/resolvers/marketplace-refund-order/sync-marketplace-refund-orders.ts +103 -0
- package/server/graphql/resolvers/marketplace-report/index.ts +7 -0
- package/server/graphql/resolvers/marketplace-report/marketplace-sales-report.ts +100 -0
- package/server/graphql/types/index.ts +2 -0
- package/server/graphql/types/marketplace-order-item/marketplace-order-item.ts +1 -0
- package/server/graphql/types/marketplace-refund-order/index.ts +16 -0
- package/server/graphql/types/marketplace-refund-order/marketplace-refund-order-list.ts +8 -0
- package/server/graphql/types/marketplace-refund-order/marketplace-refund-order.ts +17 -0
- package/server/graphql/types/marketplace-report/index.ts +10 -0
- package/server/graphql/types/marketplace-report/marketplace-sales-report-list.ts +8 -0
- 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.
|
|
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
|
|
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
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
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
|
-
|
|
243
|
-
|
|
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 =
|
|
187
|
-
marketplaceOrderShipping.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
|
+
}
|
package/server/graphql/resolvers/marketplace-refund-order/sync-all-marketplace-refund-orders.ts
ADDED
|
@@ -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,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'
|
|
@@ -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
|
+
`
|