@things-factory/worksheet-base 4.3.346 → 4.3.347

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.
@@ -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
  }
@@ -169,6 +169,10 @@ export const Mutation = /* GraphQL */ `
169
169
  worksheetNo: String!
170
170
  ): Worksheet @privilege(category: "worksheet_control", privilege: "mutation") @transaction
171
171
 
172
+ activateBulkPicking (
173
+ worksheetNo: [String!]!
174
+ ): [Worksheet] @privilege(category: "worksheet_control", privilege: "mutation") @transaction
175
+
172
176
  activatePickingReplenishment (
173
177
  worksheetNo: String!
174
178
  ): Worksheet @privilege(category: "worksheet_control", privilege: "mutation") @transaction