@things-factory/worksheet-base 3.8.0 → 3.8.4

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 (27) hide show
  1. package/dist-server/controllers/ecommerce/sellercraft-controller.js +1 -1
  2. package/dist-server/controllers/ecommerce/sellercraft-controller.js.map +1 -1
  3. package/dist-server/controllers/outbound/packing-worksheet-controller.js +2 -6
  4. package/dist-server/controllers/outbound/packing-worksheet-controller.js.map +1 -1
  5. package/dist-server/controllers/outbound/picking-worksheet-controller.js +12 -14
  6. package/dist-server/controllers/outbound/picking-worksheet-controller.js.map +1 -1
  7. package/dist-server/controllers/render-elccl-grn.js +6 -6
  8. package/dist-server/controllers/render-elccl-grn.js.map +1 -1
  9. package/dist-server/controllers/worksheet-controller.js +5 -5
  10. package/dist-server/controllers/worksheet-controller.js.map +1 -1
  11. package/dist-server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.js.map +1 -1
  12. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js +3 -2
  13. package/dist-server/graphql/resolvers/worksheet/picking/complete-picking.js.map +1 -1
  14. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js +64 -54
  15. package/dist-server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.js.map +1 -1
  16. package/dist-server/utils/inventory-util.js +0 -2
  17. package/dist-server/utils/inventory-util.js.map +1 -1
  18. package/package.json +7 -7
  19. package/server/controllers/ecommerce/sellercraft-controller.ts +2 -2
  20. package/server/controllers/outbound/packing-worksheet-controller.ts +2 -7
  21. package/server/controllers/outbound/picking-worksheet-controller.ts +32 -38
  22. package/server/controllers/render-elccl-grn.ts +8 -6
  23. package/server/controllers/worksheet-controller.ts +5 -5
  24. package/server/graphql/resolvers/worksheet/generate-worksheet/generate-release-good-worksheet.ts +3 -1
  25. package/server/graphql/resolvers/worksheet/picking/complete-picking.ts +3 -2
  26. package/server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts +67 -56
  27. package/server/utils/inventory-util.ts +0 -2
@@ -45,7 +45,7 @@ export async function completePicking(
45
45
  releaseGoodNo: string
46
46
  ): Promise<void> {
47
47
  const pickingWSCtrl: PickingWorksheetController = new PickingWorksheetController(tx, domain, user)
48
- const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
48
+ let releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne({
49
49
  where: { domain, name: releaseGoodNo },
50
50
  relations: [
51
51
  'bizplace',
@@ -53,6 +53,7 @@ export async function completePicking(
53
53
  'bizplace.company',
54
54
  'bizplace.company.domain',
55
55
  'orderInventories',
56
+ 'orderInventories.inventory',
56
57
  'orderInventories.product'
57
58
  ]
58
59
  })
@@ -84,7 +85,7 @@ export async function completePicking(
84
85
 
85
86
  if (sellercraft) {
86
87
  const sellercraftCtrl: SellercraftController = new SellercraftController(tx, domain, user)
87
- await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
88
+ releaseGood = await sellercraftCtrl.initiateOrderShipment(sellercraft, releaseGood)
88
89
  await sellercraftCtrl.initiateOrderDocument(sellercraft, releaseGood)
89
90
  } else {
90
91
  const companyDomain: Domain = releaseGood.bizplace.company.domain
@@ -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.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
  }
@@ -115,8 +115,6 @@ export async function generateInventoryHistory(
115
115
  inventoryHistory.uom = inventory.uom
116
116
  inventoryHistory.qty = qty
117
117
  inventoryHistory.openingQty = openingQty
118
- inventoryHistory.weight = 0
119
- inventoryHistory.openingWeight = 0
120
118
  inventoryHistory.uomValue = uomValue
121
119
  inventoryHistory.openingUomValue = openingUomValue
122
120
  inventoryHistory.unitCost = inventory.unitCost