@things-factory/worksheet-base 4.3.346 → 4.3.348

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 (22) hide show
  1. package/dist-server/controllers/outbound/picking-worksheet-controller.js +158 -11
  2. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  3. package/dist-server/controllers/worksheet-controller.js +4 -3
  4. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  5. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js +0 -2
  6. package/dist-server/graphql/resolvers/worksheet/picking/assign-picking-worker.js.map +1 -1
  7. package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js +56 -0
  8. package/dist-server/graphql/resolvers/worksheet/picking/bulk-activate-picking.js.map +1 -0
  9. package/dist-server/graphql/resolvers/worksheet/picking/index.js +6 -5
  10. package/dist-server/graphql/resolvers/worksheet/picking/index.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/worksheet.js +31 -41
  12. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  13. package/dist-server/graphql/types/worksheet/index.js +4 -0
  14. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  15. package/package.json +2 -2
  16. package/server/controllers/outbound/picking-worksheet-controller.ts +235 -17
  17. package/server/controllers/worksheet-controller.ts +37 -9
  18. package/server/graphql/resolvers/worksheet/picking/assign-picking-worker.ts +4 -5
  19. package/server/graphql/resolvers/worksheet/picking/bulk-activate-picking.ts +79 -0
  20. package/server/graphql/resolvers/worksheet/picking/index.ts +7 -5
  21. package/server/graphql/resolvers/worksheet/worksheet.ts +81 -42
  22. package/server/graphql/types/worksheet/index.ts +4 -0
@@ -1,12 +1,27 @@
1
- import { EntityManager, Equal, getConnection, getManager, In, IsNull, Not } from 'typeorm'
1
+ import {
2
+ EntityManager,
3
+ Equal,
4
+ getConnection,
5
+ getManager,
6
+ In,
7
+ IsNull,
8
+ Not
9
+ } from 'typeorm'
2
10
 
3
11
  import { ApplicationType } from '@things-factory/auth-base'
4
12
  import { Bizplace } from '@things-factory/biz-base'
5
13
  import { logger } from '@things-factory/env'
6
14
  import { generateId } from '@things-factory/id-rule-base'
7
15
  import { Powrup } from '@things-factory/integration-powrup'
8
- import { Sellercraft, SellercraftStatus } from '@things-factory/integration-sellercraft'
9
- import { Product, ProductBarcode, ProductDetail } from '@things-factory/product-base'
16
+ import {
17
+ Sellercraft,
18
+ SellercraftStatus
19
+ } from '@things-factory/integration-sellercraft'
20
+ import {
21
+ Product,
22
+ ProductBarcode,
23
+ ProductDetail
24
+ } from '@things-factory/product-base'
10
25
  import {
11
26
  GenerateBatchPickInfo,
12
27
  InventoryUtil,
@@ -25,6 +40,7 @@ import {
25
40
  ReleaseGood
26
41
  } from '@things-factory/sales-base'
27
42
  import { Setting } from '@things-factory/setting-base'
43
+ import { Domain } from '@things-factory/shell'
28
44
  import {
29
45
  generateInventoryHistory,
30
46
  Inventory,
@@ -40,10 +56,22 @@ import {
40
56
  TOTE_STATUS
41
57
  } from '@things-factory/warehouse-base'
42
58
 
43
- import { TASK_NUMBER_RULE_TYPE, TASK_NUMBER_SETTING_KEY, WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../constants'
59
+ import {
60
+ TASK_NUMBER_RULE_TYPE,
61
+ TASK_NUMBER_SETTING_KEY,
62
+ WORKSHEET_STATUS,
63
+ WORKSHEET_TYPE
64
+ } from '../../constants'
44
65
  import { SellercraftController } from '../../controllers'
45
- import { Worksheet, WorksheetDetail } from '../../entities'
46
- import { inventoriesByStrategy, isInventoryObsolete, WorksheetNoGenerator } from '../../utils'
66
+ import {
67
+ Worksheet,
68
+ WorksheetDetail
69
+ } from '../../entities'
70
+ import {
71
+ inventoriesByStrategy,
72
+ isInventoryObsolete,
73
+ WorksheetNoGenerator
74
+ } from '../../utils'
47
75
  import { VasWorksheetController } from '../vas/vas-worksheet-controller'
48
76
 
49
77
  export class PickingWorksheetController extends VasWorksheetController {
@@ -347,6 +375,56 @@ export class PickingWorksheetController extends VasWorksheetController {
347
375
  return worksheet
348
376
  }
349
377
 
378
+ async activateBulkPicking(worksheetNo: string[]): Promise<Worksheet[]> {
379
+ let worksheets: Worksheet[] = []
380
+ try {
381
+ const worksheetRepo = this.trxMgr.getRepository(Worksheet)
382
+ worksheets = await worksheetRepo
383
+ .createQueryBuilder('w')
384
+ .leftJoinAndSelect('w.domain', 'd')
385
+ .leftJoinAndSelect('w.bizplace', 'b')
386
+ .leftJoinAndSelect('w.worksheetDetails', 'wd')
387
+ .leftJoinAndSelect('w.releaseGood', 'rg')
388
+ .leftJoinAndSelect('rg.domain', 'rgd')
389
+ .leftJoinAndSelect('rg.bizplace', 'rgbz')
390
+ .leftJoinAndSelect('rgbz.domain', 'bzd')
391
+ .leftJoinAndSelect('b.domain', 'bd')
392
+ .leftJoinAndSelect('b.company', 'c')
393
+ .leftJoinAndSelect('c.domain', 'cd')
394
+ .leftJoinAndSelect('wd.targetInventory', 'ti')
395
+ .leftJoinAndSelect('ti.product', 'tp')
396
+ .where('w.name IN (:...worksheetNo)', { worksheetNo: worksheetNo })
397
+ .andWhere('w.status = :status', { status: WORKSHEET_STATUS.DEACTIVATED })
398
+ .getMany()
399
+
400
+ if (worksheets.length > 50) {
401
+ throw new Error('Please select maximum 50 worksheets with status deactivated to proceed')
402
+ }
403
+
404
+ let groupWs = new Map<string, string[]>()
405
+ for (const worksheet of worksheets) {
406
+ const bizplaceId = worksheet.bizplace.id
407
+ const worksheetId = worksheet.id
408
+
409
+ if (groupWs.has(bizplaceId)) {
410
+ groupWs.get(bizplaceId).push(worksheetId)
411
+ } else {
412
+ groupWs.set(bizplaceId, [worksheetId])
413
+ }
414
+ }
415
+
416
+ const groupedWsBiz = [...groupWs.entries()]
417
+ await Promise.all(
418
+ groupedWsBiz.map(async ([bizplaceId, worksheetIds]) => {
419
+ return await this.activateBulkWorksheets(bizplaceId, worksheetIds)
420
+ })
421
+ )
422
+ } catch (error) {
423
+ throw error
424
+ }
425
+ return worksheets
426
+ }
427
+
350
428
  async activateBatchPicking(worksheetNo: string): Promise<Worksheet> {
351
429
  let worksheet: Worksheet = await this.findActivatableWorksheet(worksheetNo, WORKSHEET_TYPE.BATCH_PICKING, [
352
430
  'worksheetDetails',
@@ -2030,14 +2108,16 @@ export class PickingWorksheetController extends VasWorksheetController {
2030
2108
  }
2031
2109
  }
2032
2110
 
2033
- async assignInventoriesForUnassignedOrder(worksheet: Worksheet): Promise<any> {
2111
+ async assignInventoriesForUnassignedOrder(worksheet: Worksheet, tx?: EntityManager): Promise<any> {
2034
2112
  const releaseGood = worksheet.releaseGood
2035
2113
  const orderProducts = releaseGood.orderProducts
2036
2114
  let finalOrderInventories: OrderInventory[] = []
2037
2115
  let newWorksheetDetails: WorksheetDetail[] = []
2038
- const inventoryAssignmentSetting: Setting = await this.trxMgr.getRepository(Setting).findOne({
2039
- where: { domain: this.domain, name: 'rule-for-inventory-assignment' }
2040
- })
2116
+ const transaction = tx ? tx : this.trxMgr
2117
+
2118
+ const inventoryAssignmentSetting: Setting = await transaction
2119
+ .getRepository(Setting)
2120
+ .findOne({ where: { domain: this.domain, name: 'rule-for-inventory-assignment' } })
2041
2121
 
2042
2122
  for (let op of orderProducts) {
2043
2123
  let locationSortingRules = []
@@ -2055,7 +2135,7 @@ export class PickingWorksheetController extends VasWorksheetController {
2055
2135
  locationSortingRules,
2056
2136
  releaseGood.bizplace,
2057
2137
  this.domain,
2058
- this.trxMgr,
2138
+ transaction,
2059
2139
  op.batchId
2060
2140
  )
2061
2141
 
@@ -2074,23 +2154,22 @@ export class PickingWorksheetController extends VasWorksheetController {
2074
2154
 
2075
2155
  finalOrderInventories.push(...assignedOrderInventories)
2076
2156
 
2077
- await this.trxMgr
2157
+ await transaction
2078
2158
  .getRepository(OrderProduct)
2079
2159
  .update({ id: op.id }, { status: ORDER_PRODUCT_STATUS.ASSIGNED, updater: this.user })
2080
2160
  }
2081
2161
 
2082
2162
  for (let oi of finalOrderInventories) {
2083
2163
  // update inventory locked qty and uom value
2084
- oi = await this.trxMgr.getRepository(OrderInventory).save({ ...oi })
2164
+ oi = await transaction.getRepository(OrderInventory).save({ ...oi })
2085
2165
 
2086
- await this.trxMgr.getRepository(Inventory).update(oi.inventory.id, {
2166
+ await transaction.getRepository(Inventory).update(oi.inventory.id, {
2087
2167
  lockedQty: (oi.inventory?.lockedQty || 0) + oi.releaseQty,
2088
2168
  lockedUomValue: (oi.inventory?.lockedUomValue || 0) + oi.releaseUomValue,
2089
2169
  updater: this.user
2090
2170
  })
2091
2171
 
2092
- // update product detail stock deduct unassigned qty and unassigned uom value
2093
- await this.trxMgr
2172
+ await transaction
2094
2173
  .getRepository(ProductDetailStock)
2095
2174
  .createQueryBuilder()
2096
2175
  .update(ProductDetailStock)
@@ -2117,7 +2196,7 @@ export class PickingWorksheetController extends VasWorksheetController {
2117
2196
 
2118
2197
  newWorksheetDetails.push(worksheetDetail)
2119
2198
  }
2120
- newWorksheetDetails = await this.trxMgr.getRepository(WorksheetDetail).save(newWorksheetDetails)
2199
+ newWorksheetDetails = await transaction.getRepository(WorksheetDetail).save(newWorksheetDetails)
2121
2200
 
2122
2201
  return newWorksheetDetails
2123
2202
  }
@@ -2272,4 +2351,143 @@ export class PickingWorksheetController extends VasWorksheetController {
2272
2351
  }
2273
2352
  return newWorksheetDetails
2274
2353
  }
2354
+
2355
+ async activateBulkWorksheets(bizplaceId, worksheetIds) {
2356
+ try {
2357
+ for (const worksheetId of worksheetIds) {
2358
+ try {
2359
+ let releaseGood: ReleaseGood
2360
+ let domain: Domain
2361
+
2362
+ getManager().transaction(async (tx: EntityManager) => {
2363
+ const worksheetRepo = tx.getRepository(Worksheet)
2364
+ let worksheet = await worksheetRepo
2365
+ .createQueryBuilder('w')
2366
+ .leftJoinAndSelect('w.domain', 'd')
2367
+ .leftJoinAndSelect('w.bizplace', 'b')
2368
+ .leftJoinAndSelect('w.worksheetDetails', 'wd')
2369
+ .leftJoinAndSelect('w.releaseGood', 'rg')
2370
+ .leftJoinAndSelect('rg.domain', 'rgd')
2371
+ .leftJoinAndSelect('rg.bizplace', 'rgbz')
2372
+ .leftJoinAndSelect('rgbz.domain', 'bzd')
2373
+ .leftJoinAndSelect('rg.orderProducts', 'op')
2374
+ .leftJoinAndSelect('op.productDetail', 'pd')
2375
+ .leftJoinAndSelect('pd.product', 'p')
2376
+ .leftJoinAndSelect('b.domain', 'bd')
2377
+ .leftJoinAndSelect('b.company', 'c')
2378
+ .leftJoinAndSelect('c.domain', 'cd')
2379
+ .leftJoinAndSelect('wd.targetInventory', 'ti')
2380
+ .leftJoinAndSelect('ti.product', 'tp')
2381
+ .where('w.id = :worksheetId', { worksheetId: worksheetId })
2382
+ .andWhere('w.bizplace_id = :bizplaceId', { bizplaceId: bizplaceId })
2383
+ .getOne()
2384
+
2385
+ let worksheetDetails: WorksheetDetail[]
2386
+
2387
+ if (worksheet.releaseGood?.assignedInventory == false) {
2388
+ worksheetDetails = await this.assignInventoriesForUnassignedOrder(worksheet, tx)
2389
+ worksheet.worksheetDetails = worksheetDetails
2390
+ worksheet.releaseGood.assignedInventory = true
2391
+ } else {
2392
+ worksheetDetails = worksheet.worksheetDetails.filter(x => x.status == 'DEACTIVATED')
2393
+ const targetInventoryIds: OrderInventory[] = worksheetDetails.map(
2394
+ (wsd: WorksheetDetail) => wsd.targetInventory.id
2395
+ )
2396
+
2397
+ await tx.getRepository(OrderInventory).update(
2398
+ { id: In(targetInventoryIds) },
2399
+ {
2400
+ status: ORDER_INVENTORY_STATUS.PICKING,
2401
+ updater: this.user
2402
+ }
2403
+ )
2404
+ }
2405
+
2406
+ await tx.getRepository(ReleaseGood).update(
2407
+ { id: worksheet.releaseGood.id },
2408
+ {
2409
+ status: ORDER_STATUS.PICKING,
2410
+ updater: this.user
2411
+ }
2412
+ )
2413
+
2414
+ worksheet = await this.activateWorksheet(worksheet, worksheetDetails, [], tx)
2415
+ releaseGood = worksheet.releaseGood
2416
+ domain = worksheet.domain
2417
+ })
2418
+
2419
+ const orderSource: string = releaseGood?.source
2420
+ switch (orderSource) {
2421
+ case ApplicationType.SELLERCRAFT:
2422
+ getManager().transaction(async txMgr => {
2423
+ const sellercraft: Sellercraft = await txMgr
2424
+ .getRepository(Sellercraft)
2425
+ .findOne({ domain: releaseGood.bizplace.domain, status: SellercraftStatus.ACTIVE })
2426
+
2427
+ if (sellercraft) {
2428
+ const sellercraftCtrl: SellercraftController = new SellercraftController(
2429
+ txMgr,
2430
+ this.domain,
2431
+ this.user
2432
+ )
2433
+
2434
+ if (!releaseGood?.orderPackages?.length) {
2435
+ const orderProducts: OrderProduct[] = await txMgr.getRepository(OrderProduct).find({
2436
+ where: { releaseGood },
2437
+ relations: ['product', 'product.productDetails']
2438
+ })
2439
+
2440
+ // asynchronously pack order
2441
+ await sellercraftCtrl.packOrder(sellercraft, {
2442
+ ...releaseGood,
2443
+ orderProducts,
2444
+ domain: domain
2445
+ })
2446
+ }
2447
+ }
2448
+ })
2449
+ break
2450
+
2451
+ case ApplicationType.POWRUP:
2452
+ getManager().transaction(async txMgr => {
2453
+ const powrup: Powrup = await txMgr.getRepository(Powrup).findOne({ active: true, platform: 'POWRUP' })
2454
+
2455
+ if (powrup) {
2456
+ const powrupCtrl: PowrupController = new PowrupController()
2457
+
2458
+ if (!releaseGood?.orderPackages?.length) {
2459
+ const orderProducts: OrderProduct[] = await txMgr.getRepository(OrderProduct).find({
2460
+ where: { releaseGood },
2461
+ relations: ['product', 'productDetail']
2462
+ })
2463
+
2464
+ // asynchronously pack order
2465
+ await powrupCtrl.packOrder(
2466
+ powrup,
2467
+ {
2468
+ ...releaseGood,
2469
+ orderProducts
2470
+ },
2471
+ domain,
2472
+ this.user,
2473
+ txMgr
2474
+ )
2475
+ }
2476
+ }
2477
+ })
2478
+ break
2479
+
2480
+ default:
2481
+ break
2482
+ }
2483
+ } catch (e) {
2484
+ logger.error(
2485
+ `picking-worksheet-controller[activateBulkWorksheets]: ( WorksheetId: ${worksheetId}, Error: ${e})`
2486
+ )
2487
+ }
2488
+ }
2489
+ } catch (e) {
2490
+ console.log(e)
2491
+ }
2492
+ }
2275
2493
  }
@@ -1,8 +1,25 @@
1
- import { EntityManager, EntitySchema, Equal, FindOneOptions, getRepository, In, Not } from 'typeorm'
1
+ import {
2
+ EntityManager,
3
+ EntitySchema,
4
+ Equal,
5
+ FindOneOptions,
6
+ getRepository,
7
+ In,
8
+ Not
9
+ } from 'typeorm'
2
10
 
3
- import { Role, User } from '@things-factory/auth-base'
4
- import { Bizplace, getDomainUsers } from '@things-factory/biz-base'
5
- import { Product, ProductDetail } from '@things-factory/product-base'
11
+ import {
12
+ Role,
13
+ User
14
+ } from '@things-factory/auth-base'
15
+ import {
16
+ Bizplace,
17
+ getDomainUsers
18
+ } from '@things-factory/biz-base'
19
+ import {
20
+ Product,
21
+ ProductDetail
22
+ } from '@things-factory/product-base'
6
23
  import {
7
24
  ArrivalNotice,
8
25
  DeliveryOrder,
@@ -27,8 +44,14 @@ import {
27
44
  Pallet
28
45
  } from '@things-factory/warehouse-base'
29
46
 
30
- import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../constants'
31
- import { Worksheet, WorksheetDetail } from '../entities'
47
+ import {
48
+ WORKSHEET_STATUS,
49
+ WORKSHEET_TYPE
50
+ } from '../constants'
51
+ import {
52
+ Worksheet,
53
+ WorksheetDetail
54
+ } from '../entities'
32
55
  import { WorksheetNoGenerator } from '../utils'
33
56
 
34
57
  export type ReferenceOrderType =
@@ -742,8 +765,12 @@ export class WorksheetController {
742
765
  async activateWorksheet(
743
766
  worksheet: Worksheet,
744
767
  worksheetDetails: WorksheetDetail[],
745
- changedWorksheetDetails: Partial<WorksheetDetail>[]
768
+ changedWorksheetDetails: Partial<WorksheetDetail>[],
769
+ tx?: EntityManager
746
770
  ): Promise<Worksheet> {
771
+
772
+ const transaction = tx ? tx : this.trxMgr
773
+
747
774
  if (!worksheet.id || worksheetDetails.some((wsd: WorksheetDetail) => !wsd.id)) {
748
775
  throw new Error(this.ERROR_MSG.UPDATE.ID_NOT_EXISTS)
749
776
  }
@@ -751,13 +778,14 @@ export class WorksheetController {
751
778
  worksheet.status = WORKSHEET_STATUS.EXECUTING
752
779
  worksheet.startedAt = new Date()
753
780
  worksheet.updater = this.user
754
- worksheet = await this.trxMgr.getRepository(Worksheet).save(worksheet)
781
+ worksheet = await transaction.getRepository(Worksheet).save(worksheet)
782
+
755
783
 
756
784
  worksheetDetails = this.renewWorksheetDetails(worksheetDetails, changedWorksheetDetails, 'name', {
757
785
  status: WORKSHEET_STATUS.EXECUTING,
758
786
  updater: this.user
759
787
  })
760
- worksheet.worksheetDetails = await this.trxMgr.getRepository(WorksheetDetail).save(worksheetDetails)
788
+ worksheet.worksheetDetails = await transaction.getRepository(WorksheetDetail).save(worksheetDetails)
761
789
 
762
790
  return worksheet
763
791
  }
@@ -1,7 +1,9 @@
1
+ import { EntityManager } from 'typeorm'
2
+
1
3
  import { User } from '@things-factory/auth-base'
2
4
  import { Domain } from '@things-factory/shell'
3
- import { EntityManager } from 'typeorm'
4
- import { WORKSHEET_STATUS, WORKSHEET_TYPE } from '../../../../constants'
5
+
6
+ import { WORKSHEET_TYPE } from '../../../../constants'
5
7
  import { Worksheet } from '../../../../entities'
6
8
 
7
9
  export const assignPickingWorkerResolver = {
@@ -25,9 +27,6 @@ export const assignPickingWorkerResolver = {
25
27
  },{type:WORKSHEET_TYPE.PICKING}]})
26
28
 
27
29
  if (!worksheet) throw new Error('failed to find target picking worksheet')
28
- if (worksheet.status !== WORKSHEET_STATUS.DEACTIVATED)
29
- throw new Error(`current status of worksheet is not able to assign worker`)
30
-
31
30
  worksheet.assignee = assignee
32
31
  await tx.getRepository(Worksheet).save(worksheet)
33
32
 
@@ -0,0 +1,79 @@
1
+ import { EntityManager } from 'typeorm'
2
+
3
+ import {
4
+ ApplicationType,
5
+ User
6
+ } from '@things-factory/auth-base'
7
+ import { MarketplaceStore } from '@things-factory/integration-marketplace'
8
+ import { MarketplaceOrder } from '@things-factory/marketplace-base'
9
+ import {
10
+ ORDER_STATUS,
11
+ ReleaseGood
12
+ } from '@things-factory/sales-base'
13
+ import { Domain } from '@things-factory/shell'
14
+
15
+ import {
16
+ EcommerceController,
17
+ PickingWorksheetController
18
+ } from '../../../../controllers'
19
+ import { Worksheet } from '../../../../entities'
20
+
21
+ export const activateBulkPickingResolver = {
22
+ async activateBulkPicking(_: any, { worksheetNo }, context: any) {
23
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
24
+
25
+ return await activateBulkPicking(tx, domain, user, worksheetNo)
26
+ }
27
+ }
28
+
29
+ export async function activateBulkPicking(
30
+ tx: EntityManager,
31
+ domain: Domain,
32
+ user: User,
33
+ worksheetNo: string[]
34
+ ): Promise<Worksheet[]> {
35
+ const worksheetController: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
36
+ const worksheets = await worksheetController.activateBulkPicking(worksheetNo)
37
+
38
+ for (const worksheet of worksheets) {
39
+ const companyDomain: Domain = worksheet?.bizplace.company.domain
40
+ let releaseGood: ReleaseGood = worksheet.releaseGood
41
+ const orderSource: string = releaseGood.source
42
+
43
+ switch (orderSource) {
44
+ case ApplicationType.MMS:
45
+ // find for any existing marketplace store connections
46
+ const marketplaceStores: MarketplaceStore[] = await tx.getRepository(MarketplaceStore).find({
47
+ where: { domain: companyDomain, status: 'ACTIVE', isAutoUpdateStockQty: true },
48
+ relations: ['marketplaceDistributors']
49
+ })
50
+
51
+ if (marketplaceStores?.length) {
52
+ if (marketplaceStores.some(store => store.isAutoUpdateStockQty)) {
53
+ const worksheetDetails = worksheet.worksheetDetails
54
+ let orderInventories: any[] = worksheetDetails.map(wsd => wsd.targetInventory)
55
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
56
+ await ecommerceCtrl.updateProductVariationStock(marketplaceStores, orderInventories, companyDomain)
57
+ }
58
+
59
+ const marketplaceOrder: MarketplaceOrder = await tx.getRepository(MarketplaceOrder).findOne({
60
+ where: { orderNo: releaseGood.refNo, domain: companyDomain },
61
+ relations: ['marketplaceStore']
62
+ })
63
+
64
+ if (marketplaceOrder) {
65
+ const marketplaceStore: MarketplaceStore = marketplaceOrder.marketplaceStore
66
+
67
+ if (marketplaceStore.isAutoUpdateShipment) {
68
+ const ecommerceCtrl: EcommerceController = new EcommerceController(tx, domain, user)
69
+ await ecommerceCtrl.createOrderComment(marketplaceStore, marketplaceOrder, ORDER_STATUS.PICKING)
70
+ }
71
+ }
72
+ }
73
+ break
74
+ default:
75
+ break
76
+ }
77
+ }
78
+ return worksheets
79
+ }
@@ -2,22 +2,24 @@ import { activateBatchPickingResolver } from './activate-batch-picking'
2
2
  import { activatePickingResolver } from './activate-picking'
3
3
  import { assignPickingInventoriesResolver } from './assign-picking-inventories'
4
4
  import { assignPickingWorkerResolver } from './assign-picking-worker'
5
- import { fetchAndAssignPickingTaskResolver } from './fetch-and-assign-picking-task'
6
5
  import { batchPickingResolver } from './batch-picking'
6
+ import { activateBulkPickingResolver } from './bulk-activate-picking'
7
7
  import { completeBatchPickingResolver } from './complete-batch-picking'
8
8
  import { completePickingResolver } from './complete-picking'
9
+ import { fetchAndAssignPickingTaskResolver } from './fetch-and-assign-picking-task'
9
10
  import { pickingResolver } from './picking'
10
- import { scanProductPickingResolver } from './scan-product-picking'
11
+ import { replenishmentPickingResolver } from './replenishment-picking'
11
12
  import { scanProductBatchPickingResolver } from './scan-product-batch-picking'
13
+ import { scanProductPickingResolver } from './scan-product-picking'
14
+ import { sealToteResolver } from './seal-tote'
12
15
  import { undoPickingAssigmentResolver } from './undo-picking-assignment'
13
16
  import { undoSerialNumberPickingResolver } from './undo-serial-number-picking'
14
- import { sealToteResolver } from './seal-tote'
15
- import { replenishmentPickingResolver } from './replenishment-picking'
16
17
 
17
18
  export const Mutations = {
18
19
  ...assignPickingInventoriesResolver,
19
20
  ...undoPickingAssigmentResolver,
20
21
  ...activatePickingResolver,
22
+ ...activateBulkPickingResolver,
21
23
  ...activateBatchPickingResolver,
22
24
  ...pickingResolver,
23
25
  ...scanProductPickingResolver,
@@ -29,5 +31,5 @@ export const Mutations = {
29
31
  ...fetchAndAssignPickingTaskResolver,
30
32
  ...undoSerialNumberPickingResolver,
31
33
  ...sealToteResolver,
32
- ...replenishmentPickingResolver
34
+ ...replenishmentPickingResolver,
33
35
  }
@@ -37,54 +37,93 @@ interface WorksheetInterface extends Worksheet {
37
37
 
38
38
  export const worksheetResolver = {
39
39
  async worksheet(_: any, { name }, context: any) {
40
+ console.time('query for worksheet')
40
41
  const { domain }: { domain: Domain } = context.state
42
+
41
43
  let worksheet: WorksheetInterface
44
+
45
+ let thisWorksheet = await getRepository(Worksheet).findOne({
46
+ where: {
47
+ domain,
48
+ name
49
+ }
50
+ })
51
+
52
+ let worksheetRelations: string[] = []
53
+
54
+ switch (thisWorksheet?.type) {
55
+ case 'PICKING':
56
+ case 'BATCH_PICKING':
57
+ case 'LOADING':
58
+ case 'PACKING':
59
+ case 'PICKING_REPLENISHMENT':
60
+ case 'SORTING':
61
+ case 'WAREHOUSE_RETURN':
62
+ case 'PUTAWAY_RETURN':
63
+ case 'UNLOADING_RETURN':
64
+ case 'PUTAWAY_REPLENISHMENT':
65
+ case 'VAS':
66
+ worksheetRelations.push(
67
+ 'domain',
68
+ 'bizplace',
69
+ 'bizplace.domain',
70
+ 'bufferLocation',
71
+ 'bufferLocation.warehouse',
72
+ 'arrivalNotice',
73
+ 'arrivalNotice.releaseGood',
74
+ 'releaseGood',
75
+ 'releaseGood.arrivalNotice',
76
+ 'releaseGood.shippingOrder',
77
+ 'releaseGood.orderPackages',
78
+ 'releaseGood.orderProducts',
79
+ 'releaseGood.orderProducts.product',
80
+ 'replenishment',
81
+ 'returnOrder',
82
+ 'inventoryCheck',
83
+ 'vasOrder',
84
+ 'assignee',
85
+ 'worksheetDetails',
86
+ 'worksheetDetails.targetInventory',
87
+ 'worksheetDetails.targetInventory.bizplace',
88
+ 'worksheetDetails.targetInventory.product',
89
+ 'worksheetDetails.targetInventory.inventory',
90
+ 'worksheetDetails.targetInventory.inventory.product',
91
+ 'worksheetDetails.targetInventory.inventory.warehouse',
92
+ 'worksheetDetails.targetInventory.inventory.location',
93
+ 'worksheetDetails.targetVas',
94
+ 'creator',
95
+ 'updater'
96
+ )
97
+ break
98
+
99
+ case 'UNLOADING':
100
+ worksheetRelations.push(
101
+ 'worksheetDetails',
102
+ 'worksheetDetails.toLocation',
103
+ 'worksheetDetails.targetProduct',
104
+ 'worksheetDetails.targetProduct.product',
105
+ 'worksheetDetails.targetProduct.releaseGood',
106
+ 'worksheetDetails.targetVas.product',
107
+ 'worksheetDetails.targetVas.newProduct',
108
+ 'worksheetDetails.targetVas.newProductDetail',
109
+ 'worksheetDetails.targetVas.orderVasItems',
110
+ 'worksheetDetails.targetVas.orderVasItems.vas',
111
+ 'worksheetDetails.targetInventory.releaseGood',
112
+ 'worksheetDetails.targetInventory.inspectedLocation'
113
+ )
114
+ break
115
+
116
+ default:
117
+ // Default case if the name doesn't match any defined case
118
+ break
119
+ }
120
+
42
121
  worksheet = (await getRepository(Worksheet).findOne({
43
122
  where: {
44
123
  domain,
45
124
  name
46
125
  },
47
- relations: [
48
- 'domain',
49
- 'bizplace',
50
- 'bizplace.domain',
51
- 'bufferLocation',
52
- 'bufferLocation.warehouse',
53
- 'arrivalNotice',
54
- 'arrivalNotice.releaseGood',
55
- 'releaseGood',
56
- 'releaseGood.arrivalNotice',
57
- 'releaseGood.shippingOrder',
58
- 'releaseGood.orderPackages',
59
- 'releaseGood.orderProducts',
60
- 'releaseGood.orderProducts.product',
61
- 'replenishment',
62
- 'returnOrder',
63
- 'inventoryCheck',
64
- 'vasOrder',
65
- 'assignee',
66
- 'worksheetDetails',
67
- 'worksheetDetails.toLocation',
68
- 'worksheetDetails.targetProduct',
69
- 'worksheetDetails.targetProduct.product',
70
- 'worksheetDetails.targetProduct.releaseGood',
71
- 'worksheetDetails.targetVas',
72
- 'worksheetDetails.targetVas.product',
73
- 'worksheetDetails.targetVas.newProduct',
74
- 'worksheetDetails.targetVas.newProductDetail',
75
- 'worksheetDetails.targetVas.orderVasItems',
76
- 'worksheetDetails.targetVas.orderVasItems.vas',
77
- 'worksheetDetails.targetInventory',
78
- 'worksheetDetails.targetInventory.releaseGood',
79
- 'worksheetDetails.targetInventory.product',
80
- 'worksheetDetails.targetInventory.inventory',
81
- 'worksheetDetails.targetInventory.inventory.product',
82
- 'worksheetDetails.targetInventory.inventory.warehouse',
83
- 'worksheetDetails.targetInventory.inventory.location',
84
- 'worksheetDetails.targetInventory.inspectedLocation',
85
- 'creator',
86
- 'updater'
87
- ]
126
+ relations: worksheetRelations
88
127
  })) as WorksheetInterface
89
128
 
90
129
  if (!worksheet) {
@@ -353,7 +392,7 @@ export const worksheetResolver = {
353
392
  relations: ['targetProduct']
354
393
  })
355
394
  }
356
-
395
+ console.timeEnd('query for worksheet')
357
396
  return worksheet
358
397
  },
359
398