@things-factory/worksheet-base 4.0.22 → 4.0.26

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 (104) hide show
  1. package/dist-server/controllers/ecommerce/ecommerce-controller.js +10 -3
  2. package/dist-server/controllers/ecommerce/ecommerce-controller.js.map +1 -1
  3. package/dist-server/controllers/ecommerce/sellercraft-controller.js +5 -3
  4. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  5. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js +24 -4
  6. package/dist-server/controllers/inbound/putaway-returning-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/inbound/unloading-worksheet-controller.js +98 -140
  8. package/dist-server/controllers/inbound/unloading-worksheet-controller.js.map +1 -1
  9. package/dist-server/controllers/outbound/packing-worksheet-controller.js +2 -6
  10. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  11. package/dist-server/controllers/outbound/picking-worksheet-controller.js +4 -4
  12. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  13. package/dist-server/controllers/render-orientage-do.js +3 -3
  14. package/dist-server/controllers/render-orientage-do.js.map +1 -1
  15. package/dist-server/controllers/render-orientage-grn.js +4 -4
  16. package/dist-server/controllers/render-orientage-grn.js.map +1 -1
  17. package/dist-server/controllers/worksheet-controller.js +5 -5
  18. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  19. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js +14 -0
  20. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.js.map +1 -0
  21. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  22. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js +2 -1
  23. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/index.js.map +1 -1
  24. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js +8 -4
  25. package/dist-server/graphql/resolvers/worksheet/packing-worksheet.js.map +1 -1
  26. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js +6 -4
  27. package/dist-server/graphql/resolvers/worksheet/picking/activate-picking.js.map +1 -1
  28. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +4 -7
  29. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  30. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +64 -54
  31. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
  32. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js +1 -0
  33. package/dist-server/graphql/resolvers/worksheet/picking-worksheet.js.map +1 -1
  34. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js +5 -1
  35. package/dist-server/graphql/resolvers/worksheet/putaway-returning-worksheet.js.map +1 -1
  36. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js +6 -2
  37. package/dist-server/graphql/resolvers/worksheet/putaway-worksheet.js.map +1 -1
  38. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js +3 -1
  39. package/dist-server/graphql/resolvers/worksheet/return-worksheet.js.map +1 -1
  40. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js +2 -1
  41. package/dist-server/graphql/resolvers/worksheet/sorting-worksheet.js.map +1 -1
  42. package/dist-server/graphql/resolvers/worksheet/unloading/index.js +4 -5
  43. package/dist-server/graphql/resolvers/worksheet/unloading/index.js.map +1 -1
  44. package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js +4 -4
  45. package/dist-server/graphql/resolvers/worksheet/unloading/undo-unloading.js.map +1 -1
  46. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js +4 -2
  47. package/dist-server/graphql/resolvers/worksheet/unloading-worksheet.js.map +1 -1
  48. package/dist-server/graphql/resolvers/worksheet/worksheet.js +28 -1
  49. package/dist-server/graphql/resolvers/worksheet/worksheet.js.map +1 -1
  50. package/dist-server/graphql/types/worksheet/index.js +7 -8
  51. package/dist-server/graphql/types/worksheet/index.js.map +1 -1
  52. package/dist-server/graphql/types/worksheet/worksheet-info.js +1 -0
  53. package/dist-server/graphql/types/worksheet/worksheet-info.js.map +1 -1
  54. package/package.json +16 -16
  55. package/server/controllers/ecommerce/ecommerce-controller.ts +18 -4
  56. package/server/controllers/ecommerce/sellercraft-controller.ts +11 -5
  57. package/server/controllers/inbound/putaway-returning-worksheet-controller.ts +28 -6
  58. package/server/controllers/inbound/unloading-worksheet-controller.ts +130 -152
  59. package/server/controllers/outbound/packing-worksheet-controller.ts +2 -7
  60. package/server/controllers/outbound/picking-worksheet-controller.ts +4 -4
  61. package/server/controllers/render-orientage-do.ts +7 -5
  62. package/server/controllers/render-orientage-grn.ts +9 -7
  63. package/server/controllers/worksheet-controller.ts +5 -5
  64. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-multiple-release-good-worksheet.ts +22 -0
  65. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +3 -1
  66. package/server/graphql/resolvers/worksheet/generate-worksheet/index.ts +2 -0
  67. package/server/graphql/resolvers/worksheet/packing-worksheet.ts +9 -5
  68. package/server/graphql/resolvers/worksheet/picking/activate-picking.ts +7 -4
  69. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +4 -8
  70. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +67 -56
  71. package/server/graphql/resolvers/worksheet/picking-worksheet.ts +1 -0
  72. package/server/graphql/resolvers/worksheet/putaway-returning-worksheet.ts +9 -3
  73. package/server/graphql/resolvers/worksheet/putaway-worksheet.ts +9 -3
  74. package/server/graphql/resolvers/worksheet/return-worksheet.ts +7 -3
  75. package/server/graphql/resolvers/worksheet/sorting-worksheet.ts +5 -2
  76. package/server/graphql/resolvers/worksheet/unloading/index.ts +3 -5
  77. package/server/graphql/resolvers/worksheet/unloading/undo-unloading.ts +9 -6
  78. package/server/graphql/resolvers/worksheet/unloading-worksheet.ts +7 -3
  79. package/server/graphql/resolvers/worksheet/worksheet.ts +29 -1
  80. package/server/graphql/types/worksheet/index.ts +8 -9
  81. package/server/graphql/types/worksheet/worksheet-info.ts +1 -0
  82. package/dist-server/graphql/resolvers/worksheet/edit-batch-no.js +0 -79
  83. package/dist-server/graphql/resolvers/worksheet/edit-batch-no.js.map +0 -1
  84. package/dist-server/graphql/resolvers/worksheet/preunload-worksheet.js +0 -68
  85. package/dist-server/graphql/resolvers/worksheet/preunload-worksheet.js.map +0 -1
  86. package/dist-server/graphql/resolvers/worksheet/proceed-edited-batch.js +0 -113
  87. package/dist-server/graphql/resolvers/worksheet/proceed-edited-batch.js.map +0 -1
  88. package/dist-server/graphql/resolvers/worksheet/submit-adjustment-for-approval.js +0 -58
  89. package/dist-server/graphql/resolvers/worksheet/submit-adjustment-for-approval.js.map +0 -1
  90. package/dist-server/graphql/resolvers/worksheet/unloading/complete-preunload.js +0 -23
  91. package/dist-server/graphql/resolvers/worksheet/unloading/complete-preunload.js.map +0 -1
  92. package/dist-server/graphql/resolvers/worksheet/unloading/preunload.js +0 -16
  93. package/dist-server/graphql/resolvers/worksheet/unloading/preunload.js.map +0 -1
  94. package/dist-server/graphql/resolvers/worksheet/unloading/undo-preunload.js +0 -16
  95. package/dist-server/graphql/resolvers/worksheet/unloading/undo-preunload.js.map +0 -1
  96. package/dist-server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.js +0 -15
  97. package/dist-server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.js.map +0 -1
  98. package/dist-server/graphql/resolvers/worksheet/unloading-return/undo-unload-returning.js +0 -15
  99. package/dist-server/graphql/resolvers/worksheet/unloading-return/undo-unload-returning.js.map +0 -1
  100. package/dist-server/graphql/resolvers/worksheet/unloading-return/unload-return.js +0 -15
  101. package/dist-server/graphql/resolvers/worksheet/unloading-return/unload-return.js.map +0 -1
  102. package/dist-server/migrations/1605856745211-SeedPrivilege.js +0 -56
  103. package/dist-server/migrations/1605856745211-SeedPrivilege.js.map +0 -1
  104. package/server/graphql/resolvers/worksheet/unloading/undo-product-scan-unload.ts +0 -23
@@ -1,6 +1,7 @@
1
1
  import { EntityManager, getRepository } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
+ import { ReleaseGood, OrderInventory } from '@things-factory/sales-base'
4
5
  import { Setting } from '@things-factory/setting-base'
5
6
  import { Domain } from '@things-factory/shell'
6
7
 
@@ -10,69 +11,79 @@ import { pickingWorksheet } from '../picking-worksheet'
10
11
  import { activatePicking } from './activate-picking'
11
12
 
12
13
  export const fetchAndAssignPickingTaskResolver = {
13
- async fetchAndAssignPickingTask(_: any, {}, context: any) {
14
- const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
15
- const assignee: User = await tx.getRepository(User).findOne(user.id, { relations: ['domains'] })
16
- if ((assignee?.domains || []).every((userDomain: Domain) => userDomain.id !== domain.id))
17
- throw new Error('Target user is not belong to current domain')
14
+ async fetchAndAssignPickingTask(_: any, { }, context: any) {
15
+ try {
16
+ const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
17
+ const assignee: User = await tx.getRepository(User).findOne(user.id, { relations: ['domains'] })
18
+ if ((assignee?.domains || []).every((userDomain: Domain) => userDomain.id !== domain.id))
19
+ throw new Error('Target user is not belong to current domain')
18
20
 
19
- if (!assignee) throw new Error('failed to find target user')
21
+ if (!assignee) throw new Error('failed to find target user')
20
22
 
21
- let worksheet: Worksheet
22
- worksheet = await tx.getRepository(Worksheet).findOne({
23
- relations: ['releaseGood'],
24
- where: [
25
- {
26
- domain,
27
- type: WORKSHEET_TYPE.PICKING,
28
- status: WORKSHEET_STATUS.EXECUTING,
29
- assignee: assignee
30
- },
31
- {
32
- domain,
33
- type: WORKSHEET_TYPE.PICKING,
34
- status: WORKSHEET_STATUS.DEACTIVATED,
35
- assignee: assignee
36
- }
37
- ],
38
- order: {
39
- name: 'ASC'
40
- }
41
- })
23
+ let worksheet: any
24
+ let worksheetQb = await tx.getRepository(Worksheet).createQueryBuilder('ws')
25
+ .select('ws.id')
26
+ .addSelect('ws.name')
27
+ .addSelect('ws.status')
28
+ .addSelect('ws.release_good_id')
29
+ .where('(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id =:assignee AND (ws.status = :status1 OR ws.status = :status2))', { domain_id: domain.id, type: WORKSHEET_TYPE.PICKING, assignee: assignee.id, status1: WORKSHEET_STATUS.EXECUTING, status2: WORKSHEET_STATUS.DEACTIVATED })
30
+ .andWhere(qb => {
31
+ const subQuery = qb
32
+ .subQuery()
33
+ .select('COUNT(*) AS totalPS')
34
+ .from(OrderInventory, 'OrderInventory')
35
+ .where('OrderInventory.release_good_id = ws.release_good_id')
36
+ .andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
37
+ .groupBy('OrderInventory.release_good_id')
38
+ .having('COUNT(*) > 0')
39
+ .getQuery()
40
+ return 'NOT EXISTS ' + subQuery
41
+ })
42
42
 
43
- if (!worksheet) {
44
- worksheet = await tx.getRepository(Worksheet).findOne({
45
- relations: ['releaseGood'],
46
- where: [
47
- {
48
- domain,
49
- type: WORKSHEET_TYPE.PICKING,
50
- status: WORKSHEET_STATUS.EXECUTING,
51
- assignee: null
52
- },
53
- {
54
- domain,
55
- type: WORKSHEET_TYPE.PICKING,
56
- status: WORKSHEET_STATUS.DEACTIVATED,
57
- assignee: null
58
- }
59
- ]
60
- })
43
+ worksheet = await worksheetQb.getRawOne();
61
44
 
62
- await getRepository(Worksheet).update({ id: worksheet.id }, { assignee: assignee })
63
- }
45
+ if (!worksheet) {
46
+ let worksheetQb = await tx.getRepository(Worksheet).createQueryBuilder('ws')
47
+ .select('ws.id')
48
+ .addSelect('ws.name')
49
+ .addSelect('ws.status')
50
+ .addSelect('ws.release_good_id')
51
+ .where('(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id IS NULL AND (ws.status = :status1 OR ws.status = :status2))', { domain_id: domain.id, type: WORKSHEET_TYPE.PICKING, status1: WORKSHEET_STATUS.EXECUTING, status2: WORKSHEET_STATUS.DEACTIVATED })
52
+ .andWhere(qb => {
53
+ const subQuery = qb
54
+ .subQuery()
55
+ .select('COUNT(*) AS totalPS')
56
+ .from(OrderInventory, 'OrderInventory')
57
+ .where('OrderInventory.release_good_id = ws.release_good_id')
58
+ .andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
59
+ .groupBy('OrderInventory.release_good_id')
60
+ .having('COUNT(*) > 0')
61
+ .getQuery()
62
+ return 'NOT EXISTS ' + subQuery
63
+ })
64
+
65
+ worksheet = await worksheetQb.getRawOne();
66
+
67
+ if (!worksheet) throw new Error('no suitable worksheet found')
68
+ await getRepository(Worksheet).update({ id: worksheet.id }, { assignee: assignee })
69
+ }
64
70
 
65
- if (worksheet.status == WORKSHEET_STATUS.DEACTIVATED) await activatePicking(tx, domain, user, worksheet.name)
71
+ if (worksheet.ws_status == WORKSHEET_STATUS.DEACTIVATED) await activatePicking(tx, domain, user, worksheet.ws_name)
66
72
 
67
- const locationSortingRules: Setting = await tx.getRepository(Setting).findOne({
68
- where: { domain, name: 'rule-for-picking-product' }
69
- })
73
+ const locationSortingRules: Setting = await tx.getRepository(Setting).findOne({
74
+ where: { domain, name: 'rule-for-picking-product' }
75
+ })
70
76
 
71
- const sortingRule = JSON.parse(locationSortingRules.value)
72
- const locationSortingRule = Object.keys(sortingRule).map(field => {
73
- return { name: field, desc: sortingRule[field] === 'DESC' }
74
- })
77
+ const sortingRule = JSON.parse(locationSortingRules.value)
78
+ const locationSortingRule = Object.keys(sortingRule).map(field => {
79
+ return { name: field, desc: sortingRule[field] === 'DESC' }
80
+ })
75
81
 
76
- return await pickingWorksheet(domain, worksheet.releaseGood.name, locationSortingRule, tx)
82
+ const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne(worksheet.release_good_id)
83
+
84
+ return await pickingWorksheet(domain, releaseGood.name, locationSortingRule, tx)
85
+ } catch (error) {
86
+ throw error
87
+ }
77
88
  }
78
89
  }
@@ -90,6 +90,7 @@ export async function pickingWorksheet(
90
90
  startedAt: worksheet.startedAt,
91
91
  refNo: releaseGood.refNo,
92
92
  refNo2: releaseGood.refNo2,
93
+ refNo3: releaseGood.refNo3,
93
94
  releaseGood
94
95
  },
95
96
  worksheetDetailInfos: worksheetDetails.map(async (pickingWSD: WorksheetDetail) => {
@@ -1,11 +1,13 @@
1
- import { Domain } from '@things-factory/shell'
2
1
  import { getRepository } from 'typeorm'
2
+
3
3
  import { Bizplace } from '@things-factory/biz-base'
4
- import { fetchExecutingWorksheet } from '../../../utils'
4
+ import { OrderInventory, ReturnOrder } from '@things-factory/sales-base'
5
+ import { Domain } from '@things-factory/shell'
5
6
  import { Inventory } from '@things-factory/warehouse-base'
6
- import { ReturnOrder, OrderInventory } from '@things-factory/sales-base'
7
+
7
8
  import { WORKSHEET_TYPE } from '../../../constants'
8
9
  import { Worksheet, WorksheetDetail } from '../../../entities'
10
+ import { fetchExecutingWorksheet } from '../../../utils'
9
11
 
10
12
  export const putawayReturningWorksheetResolver = {
11
13
  async putawayReturningWorksheet(_: any, { returnOrderNo }, context: any) {
@@ -32,6 +34,7 @@ export const putawayReturningWorksheetResolver = {
32
34
  [
33
35
  'bizplace',
34
36
  'returnOrder',
37
+ 'bufferLocation',
35
38
  'worksheetDetails',
36
39
  'worksheetDetails.targetInventory',
37
40
  'worksheetDetails.targetInventory.inventory',
@@ -49,7 +52,10 @@ export const putawayReturningWorksheetResolver = {
49
52
  bizplaceName: returnOrder.bizplace.name,
50
53
  partnerDomainId: customerBizplace?.domain.id,
51
54
  customerCompanyDomainId: customerCompanyDomain.id,
55
+ bufferLocation: worksheet?.bufferLocation.name,
52
56
  refNo: returnOrder.refNo,
57
+ refNo2: returnOrder.refNo2,
58
+ refNo3: returnOrder.refNo3,
53
59
  startedAt: worksheet.startedAt
54
60
  },
55
61
  worksheetDetailInfos: worksheet.worksheetDetails.map(async (putawayWSD: WorksheetDetail) => {
@@ -1,11 +1,13 @@
1
- import { ArrivalNotice, OrderInventory } from '@things-factory/sales-base'
1
+ import { getRepository } from 'typeorm'
2
+
2
3
  import { Bizplace } from '@things-factory/biz-base'
4
+ import { ArrivalNotice, OrderInventory } from '@things-factory/sales-base'
3
5
  import { Domain } from '@things-factory/shell'
4
- import { getRepository } from 'typeorm'
5
- import { fetchExecutingWorksheet } from '../../../utils'
6
6
  import { Inventory } from '@things-factory/warehouse-base'
7
+
7
8
  import { WORKSHEET_TYPE } from '../../../constants'
8
9
  import { Worksheet, WorksheetDetail } from '../../../entities'
10
+ import { fetchExecutingWorksheet } from '../../../utils'
9
11
 
10
12
  export const putawayWorksheetResolver = {
11
13
  async putawayWorksheet(_: any, { arrivalNoticeNo }, context: any) {
@@ -31,6 +33,7 @@ export const putawayWorksheetResolver = {
31
33
  [
32
34
  'bizplace',
33
35
  'arrivalNotice',
36
+ 'bufferLocation',
34
37
  'worksheetDetails',
35
38
  'worksheetDetails.targetInventory',
36
39
  'worksheetDetails.targetInventory.inventory',
@@ -48,7 +51,10 @@ export const putawayWorksheetResolver = {
48
51
  bizplaceName: customerBizplace.name,
49
52
  partnerDomainId: customerBizplace?.domain.id,
50
53
  customerCompanyDomainId: customerCompanyDomain.id,
54
+ bufferLocation: worksheet?.bufferLocation.name,
51
55
  refNo: arrivalNotice.refNo,
56
+ refNo2: arrivalNotice.refNo2,
57
+ refNo3: arrivalNotice.refNo3,
52
58
  startedAt: worksheet.startedAt
53
59
  },
54
60
  worksheetDetailInfos: worksheet.worksheetDetails.map(async (putawayWSD: WorksheetDetail) => {
@@ -1,10 +1,12 @@
1
- import { Domain } from '@things-factory/shell'
2
1
  import { getRepository } from 'typeorm'
3
- import { fetchExecutingWorksheet } from '../../../utils'
4
- import { Inventory } from '@things-factory/warehouse-base'
2
+
5
3
  import { OrderInventory, ReleaseGood } from '@things-factory/sales-base'
4
+ import { Domain } from '@things-factory/shell'
5
+ import { Inventory } from '@things-factory/warehouse-base'
6
+
6
7
  import { WORKSHEET_TYPE } from '../../../constants'
7
8
  import { Worksheet, WorksheetDetail } from '../../../entities'
9
+ import { fetchExecutingWorksheet } from '../../../utils'
8
10
 
9
11
  export const returnWorksheetResolver = {
10
12
  async returnWorksheet(_: any, { releaseGoodNo }, context: any) {
@@ -41,6 +43,8 @@ export const returnWorksheetResolver = {
41
43
  partnerDomainId: worksheet?.bizplace.domain.id,
42
44
  customerCompanyDomainId: customerCompanyDomain.id,
43
45
  refNo: releaseGood.refNo,
46
+ refNo2: releaseGood.refNo2,
47
+ refNo3: releaseGood.refNo3,
44
48
  startedAt: worksheet.startedAt
45
49
  },
46
50
  worksheetDetailInfos: worksheet.worksheetDetails.map((returnWSD: WorksheetDetail) => {
@@ -1,6 +1,8 @@
1
- import { OrderInventory, ORDER_STATUS, ORDER_INVENTORY_STATUS, ReleaseGood } from '@things-factory/sales-base'
2
- import { Domain } from '@things-factory/shell'
3
1
  import { getRepository, SelectQueryBuilder } from 'typeorm'
2
+
3
+ import { ORDER_INVENTORY_STATUS, ORDER_STATUS, OrderInventory, ReleaseGood } from '@things-factory/sales-base'
4
+ import { Domain } from '@things-factory/shell'
5
+
4
6
  import { WORKSHEET_TYPE } from '../../../constants'
5
7
  import { fetchExecutingBatchWorksheet } from '../../../utils'
6
8
 
@@ -55,6 +57,7 @@ export const sortingWorksheetResolver = {
55
57
  startedAt: worksheet.startedAt,
56
58
  refNo: releaseGood.refNo,
57
59
  refNo2: releaseGood.refNo2,
60
+ refNo3: releaseGood.refNo3,
58
61
  releaseGood
59
62
  },
60
63
  worksheetDetailInfos: items.map((item: any) => {
@@ -1,18 +1,16 @@
1
1
  import { activateUnloadingResolver } from './activate-unloading'
2
- import { unloadResolver } from './unload'
3
- import { scanProductUnloadResolver } from './scan-product-unload'
4
- import { undoUnloadingResolver } from './undo-unloading'
5
- import { undoProductScanUnloadResolver } from './undo-product-scan-unload'
6
2
  import { completeProductScanUnloadResolver } from './complete-product-scan-unload'
7
3
  import { completeUnloadingResolver } from './complete-unloading'
8
4
  import { completeUnloadingPartiallyResolver } from './complete-unloading-partially'
5
+ import { scanProductUnloadResolver } from './scan-product-unload'
6
+ import { undoUnloadingResolver } from './undo-unloading'
7
+ import { unloadResolver } from './unload'
9
8
 
10
9
  export const Mutations = {
11
10
  ...activateUnloadingResolver,
12
11
  ...scanProductUnloadResolver,
13
12
  ...unloadResolver,
14
13
  ...undoUnloadingResolver,
15
- ...undoProductScanUnloadResolver,
16
14
  ...completeProductScanUnloadResolver,
17
15
  ...completeUnloadingResolver,
18
16
  ...completeUnloadingPartiallyResolver
@@ -1,12 +1,14 @@
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'
5
+
4
6
  import { UnloadingWorksheetController } from '../../../../controllers'
5
7
 
6
8
  export const undoUnloadingResolver = {
7
- async undoUnloading(_: any, { worksheetDetailName, palletId }, context: any) {
9
+ async undoUnloading(_: any, { orderType, orderNo, inventoryIds }, context: any) {
8
10
  const { tx, domain, user }: { tx: EntityManager; domain: Domain; user: User } = context.state
9
- await undoUnloading(tx, domain, user, worksheetDetailName, palletId)
11
+ await undoUnloading(tx, domain, user, orderType, orderNo, inventoryIds)
10
12
  }
11
13
  }
12
14
 
@@ -14,9 +16,10 @@ async function undoUnloading(
14
16
  tx: EntityManager,
15
17
  domain: Domain,
16
18
  user: User,
17
- worksheetDetailName: string,
18
- palletId: string
19
+ orderType: string,
20
+ orderNo: string,
21
+ inventoryIds: [string]
19
22
  ): Promise<void> {
20
23
  const worksheetController: UnloadingWorksheetController = new UnloadingWorksheetController(tx, domain, user)
21
- await worksheetController.undoUnload(worksheetDetailName, palletId)
24
+ await worksheetController.undoUnload(orderType, orderNo, inventoryIds)
22
25
  }
@@ -1,10 +1,12 @@
1
- import { ArrivalNotice, OrderProduct } from '@things-factory/sales-base'
1
+ import { getRepository } from 'typeorm'
2
+
2
3
  import { Bizplace } from '@things-factory/biz-base'
4
+ import { ArrivalNotice, OrderProduct } from '@things-factory/sales-base'
3
5
  import { Domain } from '@things-factory/shell'
4
- import { getRepository } from 'typeorm'
5
- import { fetchExecutingWorksheet } from '../../../utils'
6
+
6
7
  import { WORKSHEET_TYPE } from '../../../constants'
7
8
  import { Worksheet, WorksheetDetail } from '../../../entities'
9
+ import { fetchExecutingWorksheet } from '../../../utils'
8
10
 
9
11
  export const unloadingWorksheetResolver = {
10
12
  async unloadingWorksheet(_: any, { arrivalNoticeNo }, context: any) {
@@ -64,6 +66,8 @@ export const unloadingWorksheetResolver = {
64
66
  bufferLocation: worksheet.bufferLocation.name,
65
67
  startedAt: worksheet.startedAt,
66
68
  refNo: arrivalNotice.refNo,
69
+ refNo2: arrivalNotice?.refNo2,
70
+ refNo3: arrivalNotice?.refNo3,
67
71
  looseItem: arrivalNotice.looseItem,
68
72
  orderVas: vasWorksheet ? vasWorksheet.worksheetDetails : null
69
73
  },
@@ -18,7 +18,8 @@ interface WorksheetInterface extends Worksheet {
18
18
  export const worksheetResolver = {
19
19
  async worksheet(_: any, { name }, context: any) {
20
20
  const { domain }: { domain: Domain } = context.state
21
- const worksheet: WorksheetInterface = (await getRepository(Worksheet).findOne({
21
+ let worksheet: WorksheetInterface
22
+ worksheet = (await getRepository(Worksheet).findOne({
22
23
  where: {
23
24
  domain,
24
25
  name
@@ -60,6 +61,33 @@ export const worksheetResolver = {
60
61
  ]
61
62
  })) as WorksheetInterface
62
63
 
64
+ if (!worksheet) {
65
+ worksheet = (await getRepository(Worksheet).findOne({
66
+ where: {
67
+ domain,
68
+ arrivalNotice: name
69
+ },
70
+ relations: [
71
+ 'domain',
72
+ 'bizplace',
73
+ 'bizplace.domain',
74
+ 'worksheetDetails',
75
+ 'worksheetDetails.targetProduct',
76
+ 'worksheetDetails.targetProduct.product',
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
+ ]
88
+ })) as WorksheetInterface
89
+ }
90
+
63
91
  let pWorksheetPickingItemSorting = getRepository(Setting).findOne({
64
92
  where: { domain, category: 'location', name: 'rule-for-worksheet-release-goods-item' }
65
93
  })
@@ -61,6 +61,10 @@ export const Mutation = /* GraphQL */ `
61
61
  releaseGoodNo: String!
62
62
  ): ReleaseGoodWorksheet @privilege(category: "worksheet_control", privilege: "mutation") @transaction
63
63
 
64
+ generateMultipleReleaseGoodWorksheet (
65
+ releaseGoodNos: [String!]
66
+ ): Boolean @privilege(category: "worksheet_control", privilege: "mutation") @transaction
67
+
64
68
  fetchSellercraftAirwayBill (
65
69
  releaseGoodNo: String!
66
70
  ): AirwayBill @privilege(category: "worksheet_control", privilege: "mutation") @transaction
@@ -186,14 +190,9 @@ export const Mutation = /* GraphQL */ `
186
190
  ): Boolean @transaction
187
191
 
188
192
  undoUnloading (
189
- worksheetDetailName: String!
190
- palletId: String!
191
- ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
192
-
193
- undoProductScanUnload (
194
- worksheetDetailName: String!
195
- palletId: String
196
- cartonId: String
193
+ orderType: String!
194
+ orderNo: String!
195
+ inventoryIds: [String]!
197
196
  ): Boolean @privilege(category: "worksheet_execute", privilege: "mutation") @transaction
198
197
 
199
198
  completeUnloadingPartially (
@@ -668,7 +667,7 @@ export const Query = /* GraphQL */ `
668
667
  findReleaseOrdersByTaskNo(taskNo: String!): [ReleaseGood] @privilege(category: "worksheet", privilege: "query") @transaction
669
668
  `
670
669
 
671
- export const Types = /* GraphQL */[
670
+ export const Types = /* GraphQL */ [
672
671
  Worksheet,
673
672
  AirwayBill,
674
673
  NewWorksheet,
@@ -23,6 +23,7 @@ export const WorksheetInfo = gql`
23
23
  palletId: String
24
24
  refNo: String
25
25
  refNo2: String
26
+ refNo3: String
26
27
  looseItem: String
27
28
  orderVas: [WorksheetDetail]
28
29
  }
@@ -1,79 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.editBatchNo = void 0;
4
- const auth_base_1 = require("@things-factory/auth-base");
5
- const sales_base_1 = require("@things-factory/sales-base");
6
- const notification_1 = require("@things-factory/notification");
7
- const constants_1 = require("../../../constants");
8
- const entities_1 = require("../../../entities");
9
- exports.editBatchNo = {
10
- async editBatchNo(_, { worksheetNo, unloadingWorksheetDetails }, context) {
11
- const { tx, domain, user } = context.state;
12
- /**
13
- * 1. Validation for worksheet
14
- * - data existing
15
- * - status of worksheet
16
- */
17
- const foundWorksheet = await tx.getRepository(entities_1.Worksheet).findOne({
18
- where: {
19
- domain: domain,
20
- name: worksheetNo,
21
- type: constants_1.WORKSHEET_TYPE.UNLOADING,
22
- status: constants_1.WORKSHEET_STATUS.DEACTIVATED
23
- },
24
- relations: ['bizplace', 'arrivalNotice', 'worksheetDetails', 'worksheetDetails.targetProduct']
25
- });
26
- if (!foundWorksheet)
27
- throw new Error(`Worksheet doesn't exists`);
28
- const foundGAN = foundWorksheet.arrivalNotice;
29
- const foundWSDs = foundWorksheet.worksheetDetails;
30
- let targetProducts = foundWSDs.map((foundWSD) => {
31
- return Object.assign(Object.assign({}, foundWSD.targetProduct), { palletQty: foundWSD.targetProduct.palletQty
32
- ? foundWSD.targetProduct.palletQty
33
- : unloadingWorksheetDetails.find((worksheetDetail) => worksheetDetail.name === foundWSD.name)
34
- .palletQty, adjustedBatchId: unloadingWorksheetDetails.find((worksheetDetail) => worksheetDetail.name === foundWSD.name).batchId, status: unloadingWorksheetDetails.find((worksheetDetail) => worksheetDetail.name === foundWSD.name)
35
- .initialBatchId ===
36
- unloadingWorksheetDetails.find((worksheetDetail) => worksheetDetail.name === foundWSD.name)
37
- .batchId
38
- ? sales_base_1.ORDER_PRODUCT_STATUS.READY_TO_UNLOAD
39
- : sales_base_1.ORDER_PRODUCT_STATUS.PENDING_APPROVAL });
40
- });
41
- await tx.getRepository(sales_base_1.OrderProduct).save(targetProducts);
42
- // notification logics
43
- // get Office Admin Users
44
- const users = await tx
45
- .getRepository('users_roles')
46
- .createQueryBuilder('ur')
47
- .select('ur.users_id', 'id')
48
- .where(qb => {
49
- const subQuery = qb
50
- .subQuery()
51
- .select('role.id')
52
- .from(auth_base_1.Role, 'role')
53
- .where("role.name = 'Office Admin'")
54
- .andWhere('role.domain_id = :domain', { domain: domain.id })
55
- .getQuery();
56
- return 'ur.roles_id IN ' + subQuery;
57
- })
58
- .getRawMany();
59
- // send notification to Office Admin Users
60
- if (users === null || users === void 0 ? void 0 : users.length) {
61
- const receivers = users.map(user => user.id);
62
- const msg = {
63
- title: `Pending Adjustment for ${foundGAN.name} (${foundWorksheet.bizplace.name})`,
64
- message: `Pending process for batch id adjustments`,
65
- url: context.header.referer,
66
- data: { url: context.header.referer }
67
- };
68
- await notification_1.sendNotification({
69
- receivers,
70
- message: Object.assign({}, msg)
71
- });
72
- }
73
- /**
74
- * 5. Update Worksheet (status: DEACTIVATED => PENDING_ADJUSTMENT)
75
- */
76
- return await tx.getRepository(entities_1.Worksheet).save(Object.assign(Object.assign({}, foundWorksheet), { status: constants_1.WORKSHEET_STATUS.PENDING_ADJUSTMENT, updater: user }));
77
- }
78
- };
79
- //# sourceMappingURL=edit-batch-no.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit-batch-no.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet/edit-batch-no.ts"],"names":[],"mappings":";;;AAAA,yDAAsD;AAEtD,2DAA8F;AAC9F,+DAA+D;AAE/D,kDAAqE;AACrE,gDAA8D;AAEjD,QAAA,WAAW,GAAG;IACzB,KAAK,CAAC,WAAW,CAAC,CAAM,EAAE,EAAE,WAAW,EAAE,yBAAyB,EAAE,EAAE,OAAY;QAChF,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAsD,OAAO,CAAC,KAAK,CAAA;QAC7F;;;;WAIG;QACH,MAAM,cAAc,GAAc,MAAM,EAAE,CAAC,aAAa,CAAC,oBAAS,CAAC,CAAC,OAAO,CAAC;YAC1E,KAAK,EAAE;gBACL,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,0BAAc,CAAC,SAAS;gBAC9B,MAAM,EAAE,4BAAgB,CAAC,WAAW;aACrC;YACD,SAAS,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,kBAAkB,EAAE,gCAAgC,CAAC;SAC/F,CAAC,CAAA;QAEF,IAAI,CAAC,cAAc;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAChE,MAAM,QAAQ,GAAkB,cAAc,CAAC,aAAa,CAAA;QAC5D,MAAM,SAAS,GAAsB,cAAc,CAAC,gBAAgB,CAAA;QACpE,IAAI,cAAc,GAAmB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAyB,EAAE,EAAE;YAC/E,uCACK,QAAQ,CAAC,aAAa,KACzB,SAAS,EAAE,QAAQ,CAAC,aAAa,CAAC,SAAS;oBACzC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,SAAS;oBAClC,CAAC,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,eAAgC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;yBACzG,SAAS,EAChB,eAAe,EAAE,yBAAyB,CAAC,IAAI,CAC7C,CAAC,eAAgC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAC7E,CAAC,OAAO,EACT,MAAM,EACJ,yBAAyB,CAAC,IAAI,CAAC,CAAC,eAAgC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;qBACzG,cAAc;oBACjB,yBAAyB,CAAC,IAAI,CAAC,CAAC,eAAgC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;yBACzG,OAAO;oBACR,CAAC,CAAC,iCAAoB,CAAC,eAAe;oBACtC,CAAC,CAAC,iCAAoB,CAAC,gBAAgB,IAC5C;QACH,CAAC,CAAC,CAAA;QACF,MAAM,EAAE,CAAC,aAAa,CAAC,yBAAY,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAEzD,sBAAsB;QACtB,yBAAyB;QACzB,MAAM,KAAK,GAAU,MAAM,EAAE;aAC1B,aAAa,CAAC,aAAa,CAAC;aAC5B,kBAAkB,CAAC,IAAI,CAAC;aACxB,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC;aAC3B,KAAK,CAAC,EAAE,CAAC,EAAE;YACV,MAAM,QAAQ,GAAG,EAAE;iBAChB,QAAQ,EAAE;iBACV,MAAM,CAAC,SAAS,CAAC;iBACjB,IAAI,CAAC,gBAAI,EAAE,MAAM,CAAC;iBAClB,KAAK,CAAC,4BAA4B,CAAC;iBACnC,QAAQ,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;iBAC3D,QAAQ,EAAE,CAAA;YACb,OAAO,iBAAiB,GAAG,QAAQ,CAAA;QACrC,CAAC,CAAC;aACD,UAAU,EAAE,CAAA;QAEf,0CAA0C;QAC1C,IAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,EAAE;YACjB,MAAM,SAAS,GAAU,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACnD,MAAM,GAAG,GAAG;gBACV,KAAK,EAAE,0BAA0B,QAAQ,CAAC,IAAI,KAAK,cAAc,CAAC,QAAQ,CAAC,IAAI,GAAG;gBAClF,OAAO,EAAE,0CAA0C;gBACnD,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO;gBAC3B,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE;aACtC,CAAA;YACD,MAAM,+BAAgB,CAAC;gBACrB,SAAS;gBACT,OAAO,oBAAO,GAAG,CAAE;aACpB,CAAC,CAAA;SACH;QAED;;WAEG;QACH,OAAO,MAAM,EAAE,CAAC,aAAa,CAAC,oBAAS,CAAC,CAAC,IAAI,iCACxC,cAAc,KACjB,MAAM,EAAE,4BAAgB,CAAC,kBAAkB,EAC3C,OAAO,EAAE,IAAI,IACb,CAAA;IACJ,CAAC;CACF,CAAA"}
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.preunloadWorksheetResolver = void 0;
4
- const sales_base_1 = require("@things-factory/sales-base");
5
- const typeorm_1 = require("typeorm");
6
- const constants_1 = require("../../../constants");
7
- const entities_1 = require("../../../entities");
8
- exports.preunloadWorksheetResolver = {
9
- async preunloadWorksheet(_, { arrivalNoticeNo }, context) {
10
- const { domain } = context.state;
11
- const arrivalNotice = await typeorm_1.getRepository(sales_base_1.ArrivalNotice).findOne({
12
- where: { domain, name: arrivalNoticeNo, status: sales_base_1.ORDER_STATUS.READY_TO_UNLOAD },
13
- relations: ['bizplace']
14
- });
15
- if (!arrivalNotice)
16
- throw new Error(`Arrival notice dosen't exist.`);
17
- const customerBizplace = arrivalNotice.bizplace;
18
- const worksheet = await typeorm_1.getRepository(entities_1.Worksheet).findOne({
19
- where: {
20
- domain,
21
- arrivalNotice,
22
- bizplace: customerBizplace,
23
- type: constants_1.WORKSHEET_TYPE.UNLOADING,
24
- status: constants_1.WORKSHEET_STATUS.DEACTIVATED
25
- },
26
- relations: [
27
- 'bizplace',
28
- 'bufferLocation',
29
- 'bufferLocation.warehouse',
30
- 'arrivalNotice',
31
- 'worksheetDetails',
32
- 'worksheetDetails.targetProduct',
33
- 'worksheetDetails.targetProduct.product',
34
- 'creator',
35
- 'updater'
36
- ]
37
- });
38
- if (!worksheet)
39
- throw new Error(`Worksheet dosen't exist.`);
40
- return {
41
- worksheetInfo: {
42
- bizplaceName: customerBizplace.name,
43
- containerNo: arrivalNotice.containerNo,
44
- bufferLocation: worksheet.bufferLocation.name,
45
- startedAt: worksheet.startedAt,
46
- refNo: arrivalNotice.refNo
47
- },
48
- worksheetDetailInfos: worksheet.worksheetDetails.map(async (productWSD) => {
49
- const targetProduct = productWSD.targetProduct;
50
- return {
51
- name: productWSD.name,
52
- batchId: targetProduct.batchId,
53
- adjustedBatchId: (targetProduct === null || targetProduct === void 0 ? void 0 : targetProduct.adjustedBatchId) ? targetProduct.adjustedBatchId : '',
54
- product: targetProduct.product,
55
- description: productWSD.description,
56
- targetName: targetProduct.name,
57
- packingType: targetProduct.packingType,
58
- palletQty: targetProduct.palletQty,
59
- adjustedPalletQty: (targetProduct === null || targetProduct === void 0 ? void 0 : targetProduct.adjustedPalletQty) ? targetProduct.adjustedPalletQty : null,
60
- packQty: targetProduct.packQty,
61
- remark: targetProduct.remark,
62
- status: targetProduct.status
63
- };
64
- })
65
- };
66
- }
67
- };
68
- //# sourceMappingURL=preunload-worksheet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"preunload-worksheet.js","sourceRoot":"","sources":["../../../../server/graphql/resolvers/worksheet/preunload-worksheet.ts"],"names":[],"mappings":";;;AACA,2DAAsF;AAEtF,qCAAuC;AACvC,kDAAqE;AACrE,gDAA8D;AAEjD,QAAA,0BAA0B,GAAG;IACxC,KAAK,CAAC,kBAAkB,CAAC,CAAM,EAAE,EAAE,eAAe,EAAE,EAAE,OAAY;QAChE,MAAM,EAAE,MAAM,EAAE,GAAuB,OAAO,CAAC,KAAK,CAAA;QACpD,MAAM,aAAa,GAAkB,MAAM,uBAAa,CAAC,0BAAa,CAAC,CAAC,OAAO,CAAC;YAC9E,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,yBAAY,CAAC,eAAe,EAAE;YAC9E,SAAS,EAAE,CAAC,UAAU,CAAC;SACxB,CAAC,CAAA;QAEF,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QACpE,MAAM,gBAAgB,GAAa,aAAa,CAAC,QAAQ,CAAA;QAEzD,MAAM,SAAS,GAAc,MAAM,uBAAa,CAAC,oBAAS,CAAC,CAAC,OAAO,CAAC;YAClE,KAAK,EAAE;gBACL,MAAM;gBACN,aAAa;gBACb,QAAQ,EAAE,gBAAgB;gBAC1B,IAAI,EAAE,0BAAc,CAAC,SAAS;gBAC9B,MAAM,EAAE,4BAAgB,CAAC,WAAW;aACrC;YACD,SAAS,EAAE;gBACT,UAAU;gBACV,gBAAgB;gBAChB,0BAA0B;gBAC1B,eAAe;gBACf,kBAAkB;gBAClB,gCAAgC;gBAChC,wCAAwC;gBACxC,SAAS;gBACT,SAAS;aACV;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;QAE3D,OAAO;YACL,aAAa,EAAE;gBACb,YAAY,EAAE,gBAAgB,CAAC,IAAI;gBACnC,WAAW,EAAE,aAAa,CAAC,WAAW;gBACtC,cAAc,EAAE,SAAS,CAAC,cAAc,CAAC,IAAI;gBAC7C,SAAS,EAAE,SAAS,CAAC,SAAS;gBAC9B,KAAK,EAAE,aAAa,CAAC,KAAK;aAC3B;YACD,oBAAoB,EAAE,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,UAA2B,EAAE,EAAE;gBACzF,MAAM,aAAa,GAAiB,UAAU,CAAC,aAAa,CAAA;gBAE5D,OAAO;oBACL,IAAI,EAAE,UAAU,CAAC,IAAI;oBACrB,OAAO,EAAE,aAAa,CAAC,OAAO;oBAC9B,eAAe,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,eAAe,EAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE;oBACpF,OAAO,EAAE,aAAa,CAAC,OAAO;oBAC9B,WAAW,EAAE,UAAU,CAAC,WAAW;oBACnC,UAAU,EAAE,aAAa,CAAC,IAAI;oBAC9B,WAAW,EAAE,aAAa,CAAC,WAAW;oBACtC,SAAS,EAAE,aAAa,CAAC,SAAS;oBAClC,iBAAiB,EAAE,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,iBAAiB,EAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI;oBAC5F,OAAO,EAAE,aAAa,CAAC,OAAO;oBAC9B,MAAM,EAAE,aAAa,CAAC,MAAM;oBAC5B,MAAM,EAAE,aAAa,CAAC,MAAM;iBAC7B,CAAA;YACH,CAAC,CAAC;SACH,CAAA;IACH,CAAC;CACF,CAAA"}