@things-factory/worksheet-base 4.3.86 → 4.3.87

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.
@@ -25,8 +25,7 @@ exports.fetchAndAssignPickingTaskResolver = {
25
25
  .select('ws.id')
26
26
  .addSelect('ws.name')
27
27
  .addSelect('ws.status')
28
- .addSelect('ws.release_good_id')
29
- .innerJoin('ws.releaseGood', 'rg')
28
+ .innerJoinAndSelect('ws.releaseGood', 'rg')
30
29
  .where('(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id =:assignee AND (ws.status = :status1 OR ws.status = :status2))', {
31
30
  domain_id: domain.id,
32
31
  type: constants_1.WORKSHEET_TYPE.PICKING,
@@ -47,42 +46,45 @@ exports.fetchAndAssignPickingTaskResolver = {
47
46
  return 'NOT EXISTS ' + subQuery;
48
47
  })
49
48
  .orderBy('"rg"."created_at"', 'ASC');
50
- worksheet = await worksheetQb.getRawOne();
49
+ worksheet = await worksheetQb.getOne();
51
50
  if (!worksheet) {
52
- let worksheetQb = await tx
53
- .getRepository(entities_1.Worksheet)
54
- .createQueryBuilder('ws')
55
- .select('ws.id')
56
- .addSelect('ws.name')
57
- .addSelect('ws.status')
58
- .addSelect('ws.release_good_id')
59
- .innerJoin('ws.releaseGood', 'rg')
60
- .where('(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id IS NULL AND (ws.status = :status1 OR ws.status = :status2))', {
61
- domain_id: domain.id,
62
- type: constants_1.WORKSHEET_TYPE.PICKING,
63
- status1: constants_1.WORKSHEET_STATUS.EXECUTING,
64
- status2: constants_1.WORKSHEET_STATUS.DEACTIVATED
65
- })
66
- .andWhere(qb => {
67
- const subQuery = qb
68
- .subQuery()
69
- .select('COUNT(*) AS totalPS')
70
- .from(sales_base_1.OrderInventory, 'OrderInventory')
71
- .where('OrderInventory.release_good_id = ws.release_good_id')
72
- .andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
73
- .groupBy('OrderInventory.release_good_id')
74
- .having('COUNT(*) > 0')
75
- .getQuery();
76
- return 'NOT EXISTS ' + subQuery;
77
- })
78
- .orderBy('"rg"."created_at"', 'ASC');
79
- worksheet = await worksheetQb.getRawOne();
80
- if (!worksheet)
51
+ // update and return updated worksheet id
52
+ let updatedWorksheets = await (0, typeorm_1.getConnection)().transaction(async (tx2) => {
53
+ let x = await tx2.getRepository(entities_1.Worksheet).query(`
54
+ UPDATE worksheets ws SET assignee_id = $2,
55
+ updated_at = NOW(),
56
+ updater_id = $2
57
+ FROM (
58
+ SELECT ws.id, ws.name, ws.status, ws.release_good_id FROM worksheets ws
59
+ INNER JOIN release_goods rg ON rg.id = ws.release_good_id
60
+ WHERE
61
+ ws.domain_id = $1 AND
62
+ ws.type = 'PICKING' AND
63
+ ws.assignee_id IS NULL AND
64
+ (ws.status = 'EXECUTING' OR ws.status = 'DEACTIVATED') AND
65
+ NOT EXISTS (
66
+ SELECT count(id) AS "totalPS"
67
+ FROM order_inventories oi
68
+ WHERE oi.release_good_id = ws.release_good_id AND
69
+ oi.status = 'PENDING_SPLIT'
70
+ GROUP BY oi.release_good_id
71
+ HAVING count(id) > 0
72
+ )
73
+ ORDER BY rg.release_date, rg.created_at LIMIT 1
74
+ ) src where src.id = ws.id
75
+ RETURNING ws.id;
76
+ `, [domain.id, assignee.id]);
77
+ return x[0];
78
+ });
79
+ if (updatedWorksheets.length == 0)
81
80
  throw new Error('no suitable worksheet found');
82
- await (0, typeorm_1.getRepository)(entities_1.Worksheet).update({ id: worksheet.ws_id }, { assignee: assignee });
81
+ // relace worksheet with newly assigned worksheet
82
+ worksheet = await tx
83
+ .getRepository(entities_1.Worksheet)
84
+ .findOne({ where: { id: updatedWorksheets[0].id }, relations: ['releaseGood'] });
83
85
  }
84
- if (worksheet.ws_status == constants_1.WORKSHEET_STATUS.DEACTIVATED)
85
- await (0, activate_picking_1.activatePicking)(tx, domain, user, worksheet.ws_name);
86
+ if (worksheet.status == constants_1.WORKSHEET_STATUS.DEACTIVATED)
87
+ await (0, activate_picking_1.activatePicking)(tx, domain, user, worksheet.name);
86
88
  const locationSortingRules = await tx.getRepository(setting_base_1.Setting).findOne({
87
89
  where: { domain, name: 'rule-for-picking-product' }
88
90
  });
@@ -90,7 +92,7 @@ exports.fetchAndAssignPickingTaskResolver = {
90
92
  const locationSortingRule = Object.keys(sortingRule).map(field => {
91
93
  return { name: field, desc: sortingRule[field] === 'DESC' };
92
94
  });
93
- const releaseGood = await tx.getRepository(sales_base_1.ReleaseGood).findOne(worksheet.release_good_id);
95
+ const releaseGood = await tx.getRepository(sales_base_1.ReleaseGood).findOne(worksheet.releaseGood.id);
94
96
  return await (0, picking_worksheet_1.pickingWorksheet)(domain, releaseGood.name, locationSortingRule, tx);
95
97
  }
96
98
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-and-assign-picking-task.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-and-assign-picking-task.js","sourceRoot":"","sources":["../../../../../server/graphql/resolvers/worksheet/picking/fetch-and-assign-picking-task.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/worksheet-base",
3
- "version": "4.3.86",
3
+ "version": "4.3.87",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -40,5 +40,5 @@
40
40
  "@things-factory/transport-base": "^4.3.86",
41
41
  "@things-factory/warehouse-base": "^4.3.86"
42
42
  },
43
- "gitHead": "eacc7f20dbaa9893ce2265e064eff1dd63218365"
43
+ "gitHead": "a8a7a0ddad241a559d0d6b24c4d7e6503f81049b"
44
44
  }
@@ -1,7 +1,7 @@
1
- import { EntityManager, getRepository } from 'typeorm'
1
+ import { EntityManager, getConnection } from 'typeorm'
2
2
 
3
3
  import { User } from '@things-factory/auth-base'
4
- import { ReleaseGood, OrderInventory } from '@things-factory/sales-base'
4
+ import { OrderInventory, ReleaseGood } from '@things-factory/sales-base'
5
5
  import { Setting } from '@things-factory/setting-base'
6
6
  import { Domain } from '@things-factory/shell'
7
7
 
@@ -20,15 +20,14 @@ export const fetchAndAssignPickingTaskResolver = {
20
20
 
21
21
  if (!assignee) throw new Error('failed to find target user')
22
22
 
23
- let worksheet: any
23
+ let worksheet: Worksheet
24
24
  let worksheetQb = await tx
25
25
  .getRepository(Worksheet)
26
26
  .createQueryBuilder('ws')
27
27
  .select('ws.id')
28
28
  .addSelect('ws.name')
29
29
  .addSelect('ws.status')
30
- .addSelect('ws.release_good_id')
31
- .innerJoin('ws.releaseGood', 'rg')
30
+ .innerJoinAndSelect('ws.releaseGood', 'rg')
32
31
  .where(
33
32
  '(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id =:assignee AND (ws.status = :status1 OR ws.status = :status2))',
34
33
  {
@@ -53,48 +52,50 @@ export const fetchAndAssignPickingTaskResolver = {
53
52
  })
54
53
  .orderBy('"rg"."created_at"', 'ASC')
55
54
 
56
- worksheet = await worksheetQb.getRawOne()
55
+ worksheet = await worksheetQb.getOne()
57
56
 
58
57
  if (!worksheet) {
59
- let worksheetQb = await tx
60
- .getRepository(Worksheet)
61
- .createQueryBuilder('ws')
62
- .select('ws.id')
63
- .addSelect('ws.name')
64
- .addSelect('ws.status')
65
- .addSelect('ws.release_good_id')
66
- .innerJoin('ws.releaseGood', 'rg')
67
- .where(
68
- '(ws.domain_id = :domain_id AND ws.type = :type AND ws.assignee_id IS NULL AND (ws.status = :status1 OR ws.status = :status2))',
69
- {
70
- domain_id: domain.id,
71
- type: WORKSHEET_TYPE.PICKING,
72
- status1: WORKSHEET_STATUS.EXECUTING,
73
- status2: WORKSHEET_STATUS.DEACTIVATED
74
- }
58
+ // update and return updated worksheet id
59
+ let updatedWorksheets = await getConnection().transaction(async (tx2: EntityManager) => {
60
+ let x = await tx2.getRepository(Worksheet).query(
61
+ `
62
+ UPDATE worksheets ws SET assignee_id = $2,
63
+ updated_at = NOW(),
64
+ updater_id = $2
65
+ FROM (
66
+ SELECT ws.id, ws.name, ws.status, ws.release_good_id FROM worksheets ws
67
+ INNER JOIN release_goods rg ON rg.id = ws.release_good_id
68
+ WHERE
69
+ ws.domain_id = $1 AND
70
+ ws.type = 'PICKING' AND
71
+ ws.assignee_id IS NULL AND
72
+ (ws.status = 'EXECUTING' OR ws.status = 'DEACTIVATED') AND
73
+ NOT EXISTS (
74
+ SELECT count(id) AS "totalPS"
75
+ FROM order_inventories oi
76
+ WHERE oi.release_good_id = ws.release_good_id AND
77
+ oi.status = 'PENDING_SPLIT'
78
+ GROUP BY oi.release_good_id
79
+ HAVING count(id) > 0
80
+ )
81
+ ORDER BY rg.release_date, rg.created_at LIMIT 1
82
+ ) src where src.id = ws.id
83
+ RETURNING ws.id;
84
+ `,
85
+ [domain.id, assignee.id]
75
86
  )
76
- .andWhere(qb => {
77
- const subQuery = qb
78
- .subQuery()
79
- .select('COUNT(*) AS totalPS')
80
- .from(OrderInventory, 'OrderInventory')
81
- .where('OrderInventory.release_good_id = ws.release_good_id')
82
- .andWhere(`OrderInventory.status = 'PENDING_SPLIT'`)
83
- .groupBy('OrderInventory.release_good_id')
84
- .having('COUNT(*) > 0')
85
- .getQuery()
86
- return 'NOT EXISTS ' + subQuery
87
- })
88
- .orderBy('"rg"."created_at"', 'ASC')
87
+ return x[0]
88
+ })
89
89
 
90
- worksheet = await worksheetQb.getRawOne()
90
+ if (updatedWorksheets.length == 0) throw new Error('no suitable worksheet found')
91
91
 
92
- if (!worksheet) throw new Error('no suitable worksheet found')
93
- await getRepository(Worksheet).update({ id: worksheet.ws_id }, { assignee: assignee })
92
+ // relace worksheet with newly assigned worksheet
93
+ worksheet = await tx
94
+ .getRepository(Worksheet)
95
+ .findOne({ where: { id: updatedWorksheets[0].id }, relations: ['releaseGood'] })
94
96
  }
95
97
 
96
- if (worksheet.ws_status == WORKSHEET_STATUS.DEACTIVATED)
97
- await activatePicking(tx, domain, user, worksheet.ws_name)
98
+ if (worksheet.status == WORKSHEET_STATUS.DEACTIVATED) await activatePicking(tx, domain, user, worksheet.name)
98
99
 
99
100
  const locationSortingRules: Setting = await tx.getRepository(Setting).findOne({
100
101
  where: { domain, name: 'rule-for-picking-product' }
@@ -105,7 +106,7 @@ export const fetchAndAssignPickingTaskResolver = {
105
106
  return { name: field, desc: sortingRule[field] === 'DESC' }
106
107
  })
107
108
 
108
- const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne(worksheet.release_good_id)
109
+ const releaseGood: ReleaseGood = await tx.getRepository(ReleaseGood).findOne(worksheet.releaseGood.id)
109
110
 
110
111
  return await pickingWorksheet(domain, releaseGood.name, locationSortingRule, tx)
111
112
  } catch (error) {