@steedos-labs/content-compliance 1.0.3 → 1.0.5

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 (54) hide show
  1. package/dist/index.js +1 -1
  2. package/lib/actions/bypassApproval.js +38 -36
  3. package/lib/actions/bypassApproval.js.map +1 -1
  4. package/lib/actions/terminate.js +1 -1
  5. package/lib/actions/terminate.js.map +1 -1
  6. package/lib/methods/__tests__/attachment.test.d.ts +1 -0
  7. package/lib/methods/__tests__/attachment.test.js +31 -0
  8. package/lib/methods/__tests__/attachment.test.js.map +1 -0
  9. package/lib/methods/__tests__/contentHubTagSync.test.js +41 -1
  10. package/lib/methods/__tests__/contentHubTagSync.test.js.map +1 -1
  11. package/lib/methods/__tests__/productPicklist.test.d.ts +1 -0
  12. package/lib/methods/__tests__/productPicklist.test.js +98 -0
  13. package/lib/methods/__tests__/productPicklist.test.js.map +1 -0
  14. package/lib/methods/__tests__/spaceUserAgencyFieldsMetadata.test.d.ts +1 -0
  15. package/lib/methods/__tests__/spaceUserAgencyFieldsMetadata.test.js +109 -0
  16. package/lib/methods/__tests__/spaceUserAgencyFieldsMetadata.test.js.map +1 -0
  17. package/lib/methods/__tests__/terminateBypassAttachments.test.d.ts +1 -0
  18. package/lib/methods/__tests__/terminateBypassAttachments.test.js +163 -0
  19. package/lib/methods/__tests__/terminateBypassAttachments.test.js.map +1 -0
  20. package/lib/methods/approval_engine.d.ts +1 -1
  21. package/lib/methods/approval_engine.js +69 -43
  22. package/lib/methods/approval_engine.js.map +1 -1
  23. package/lib/methods/attachment.d.ts +2 -0
  24. package/lib/methods/attachment.js +21 -0
  25. package/lib/methods/attachment.js.map +1 -0
  26. package/lib/methods/content_hub.js +3 -3
  27. package/lib/methods/content_hub.js.map +1 -1
  28. package/lib/methods/content_hub_material_group_rule.js +2 -2
  29. package/lib/methods/content_hub_material_group_rule.js.map +1 -1
  30. package/lib/methods/content_hub_tag.d.ts +4 -0
  31. package/lib/methods/content_hub_tag.js +10 -3
  32. package/lib/methods/content_hub_tag.js.map +1 -1
  33. package/lib/methods/dashboard_sync_data.js +34 -30
  34. package/lib/methods/dashboard_sync_data.js.map +1 -1
  35. package/lib/methods/product_picklist.d.ts +4 -0
  36. package/lib/methods/product_picklist.js +10 -0
  37. package/lib/methods/product_picklist.js.map +1 -0
  38. package/lib/methods/tag_label.d.ts +2 -0
  39. package/lib/methods/tag_label.js +4 -3
  40. package/lib/methods/tag_label.js.map +1 -1
  41. package/main/default/objects/pepsico_approval_process/fields/attachments.field.yml +11 -0
  42. package/main/default/objects/pepsico_ch_sync_rule/fields/product.field.yml +4 -2
  43. package/main/default/objects/pepsico_material_approval/buttons/pepsico_bypass_approval.button.yml +24 -1
  44. package/main/default/objects/pepsico_material_approval/buttons/pepsico_terminate.button.yml +24 -1
  45. package/main/default/objects/pepsico_material_approval/fields/ch_sync_rule_check.field.yml +4 -8
  46. package/main/default/objects/pepsico_material_approval/fields/product.field.yml +16 -3
  47. package/main/default/objects/pepsico_reviewer/fields/product.field.yml +11 -2
  48. package/main/default/triggers/pepsico_material_approval_changName.trigger.yml +3 -1
  49. package/main/default/triggers/pepsico_material_approval_tag_label.trigger.yml +6 -3
  50. package/package.json +2 -2
  51. package/public/account-apply/ccs-agency-application.docx +0 -0
  52. package/public/account-apply/ccs-employee-application.docx +0 -0
  53. package/public/dynamic.css +85 -0
  54. package/public/dynamic.js +96 -0
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var fs = require("fs");
5
+ var path = require("path");
6
+ var yaml = require("js-yaml");
7
+ var fieldsRoot = path.resolve(__dirname, '../../../main/default/objects/space_users/fields');
8
+ var licenseFieldsRoot = path.resolve(fieldsRoot, '../../../../../../license-management/main/default/objects/space_users/fields');
9
+ var spaceUsersZhCnTranslation = path.resolve(fieldsRoot, '../../../objectTranslations/space_users.zh-CN/space_users.zh-CN.objectTranslation.yml');
10
+ var readField = function (fileName) { return yaml.safeLoad(fs.readFileSync(path.join(fieldsRoot, fileName), 'utf8')); };
11
+ var readLicenseField = function (fileName) { return yaml.safeLoad(fs.readFileSync(path.join(licenseFieldsRoot, fileName), 'utf8')); };
12
+ describe('space_users Agency field metadata', function () {
13
+ var emailNotification = readField('email_notification.field.yml');
14
+ var contractExpiry = readField('agency_contract_expiry_date.field.yml');
15
+ var pepsicoContact = readField('agency_pepsico_contact.field.yml');
16
+ var agencyFields = [contractExpiry, pepsicoContact];
17
+ it('shows both Agency fields only to space administrators for collaborator records', function () {
18
+ var e_1, _a;
19
+ try {
20
+ for (var agencyFields_1 = tslib_1.__values(agencyFields), agencyFields_1_1 = agencyFields_1.next(); !agencyFields_1_1.done; agencyFields_1_1 = agencyFields_1.next()) {
21
+ var field = agencyFields_1_1.value;
22
+ expect(field.visible_on).toBe('{{global.user.is_space_admin === true && formData.is_collaborator === true}}');
23
+ }
24
+ }
25
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
26
+ finally {
27
+ try {
28
+ if (agencyFields_1_1 && !agencyFields_1_1.done && (_a = agencyFields_1.return)) _a.call(agencyFields_1);
29
+ }
30
+ finally { if (e_1) throw e_1.error; }
31
+ }
32
+ });
33
+ it('places both Agency fields after email notification in personal information', function () {
34
+ expect(emailNotification.group).toBe('个人信息');
35
+ expect(contractExpiry.group).toBe('个人信息');
36
+ expect(contractExpiry.sort_no).toBe(10000);
37
+ expect(pepsicoContact.group).toBe('个人信息');
38
+ expect(pepsicoContact.sort_no).toBe(10010);
39
+ expect(contractExpiry.sort_no).toBeGreaterThan(emailNotification.sort_no);
40
+ expect(pepsicoContact.sort_no).toBeGreaterThan(contractExpiry.sort_no);
41
+ });
42
+ });
43
+ describe('space_users license approval field metadata', function () {
44
+ var avatar = readField('avatar.field.yml');
45
+ var jobGrade = readLicenseField('job_grade.field.yml');
46
+ var lineManager = readLicenseField('line_manager.field.yml');
47
+ var approvalFields = [jobGrade, lineManager];
48
+ it('merges line manager and function head into one 部门审批人 field (function_head removed)', function () {
49
+ expect(lineManager.name).toBe('line_manager');
50
+ expect(lineManager.label).toBe('部门审批人');
51
+ expect(fs.existsSync(path.join(licenseFieldsRoot, 'line_manager.field.yml'))).toBe(true);
52
+ expect(fs.existsSync(path.join(licenseFieldsRoot, 'function_head.field.yml'))).toBe(false);
53
+ });
54
+ it('uses the requested display name without changing the job-grade API name', function () {
55
+ expect(jobGrade.name).toBe('job_grade');
56
+ expect(jobGrade.label).toBe('用户职级');
57
+ });
58
+ it('places the two approval fields after avatar in personal information', function () {
59
+ var e_2, _a;
60
+ expect(avatar.group).toBe('个人信息');
61
+ expect(avatar.sort_no).toBe(99998);
62
+ try {
63
+ for (var approvalFields_1 = tslib_1.__values(approvalFields), approvalFields_1_1 = approvalFields_1.next(); !approvalFields_1_1.done; approvalFields_1_1 = approvalFields_1.next()) {
64
+ var field = approvalFields_1_1.value;
65
+ expect(field.group).toBe('个人信息');
66
+ }
67
+ }
68
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
69
+ finally {
70
+ try {
71
+ if (approvalFields_1_1 && !approvalFields_1_1.done && (_a = approvalFields_1.return)) _a.call(approvalFields_1);
72
+ }
73
+ finally { if (e_2) throw e_2.error; }
74
+ }
75
+ expect(jobGrade.sort_no).toBe(100000);
76
+ expect(lineManager.sort_no).toBe(100010);
77
+ expect(jobGrade.sort_no).toBeGreaterThan(avatar.sort_no);
78
+ expect(lineManager.sort_no).toBeGreaterThan(jobGrade.sort_no);
79
+ });
80
+ });
81
+ describe('space_users Chinese translation overrides', function () {
82
+ it('uses 登录 instead of the built-in 登陆 typo for last_logon', function () {
83
+ expect(fs.existsSync(spaceUsersZhCnTranslation)).toBe(true);
84
+ var translation = yaml.safeLoad(fs.readFileSync(spaceUsersZhCnTranslation, 'utf8'));
85
+ expect(translation.name).toBe('space_users');
86
+ expect(translation.fields.last_logon.label).toBe('最近登录');
87
+ });
88
+ });
89
+ describe('space_users login status field visibility', function () {
90
+ var lastLogon = readField('last_logon.field.yml');
91
+ var loginExpired = readField('login_expired.field.yml');
92
+ it('shows login status only to space administrators in read mode', function () {
93
+ var e_3, _a;
94
+ try {
95
+ for (var _b = tslib_1.__values([lastLogon, loginExpired]), _c = _b.next(); !_c.done; _c = _b.next()) {
96
+ var field = _c.value;
97
+ expect(field.visible_on).toBe('{{global.user.is_space_admin === true && global.mode === "read"}}');
98
+ }
99
+ }
100
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
101
+ finally {
102
+ try {
103
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
104
+ }
105
+ finally { if (e_3) throw e_3.error; }
106
+ }
107
+ });
108
+ });
109
+ //# sourceMappingURL=spaceUserAgencyFieldsMetadata.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spaceUserAgencyFieldsMetadata.test.js","sourceRoot":"","sources":["../../../src/methods/__tests__/spaceUserAgencyFieldsMetadata.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var approval_engine_1 = require("../approval_engine");
5
+ var bypassApproval_1 = require("../../actions/bypassApproval");
6
+ var consts_1 = require("../consts");
7
+ var baseApproval = {
8
+ _id: 'approval-1',
9
+ owner: 'owner-1',
10
+ space: 'space-1',
11
+ current_step: consts_1.Step.departmental_review,
12
+ person_pending_approve: ['reviewer-1'],
13
+ ca_reviewer: ['reviewer-1'],
14
+ handler_ca: ['reviewer-1']
15
+ };
16
+ var createCtx = function (_a) {
17
+ var _b = _a === void 0 ? {} : _a, _c = _b.userId, userId = _c === void 0 ? 'owner-1' : _c, _d = _b.terminateRecords, terminateRecords = _d === void 0 ? [] : _d, _e = _b.processRecords, processRecords = _e === void 0 ? [] : _e;
18
+ var objects = {
19
+ pepsico_material_approval: {
20
+ findOne: jest.fn(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
21
+ return [2, baseApproval];
22
+ }); }); }),
23
+ update: jest.fn(),
24
+ directUpdate: jest.fn()
25
+ },
26
+ pepsico_approval_process: {
27
+ insert: jest.fn(),
28
+ update: jest.fn(),
29
+ directUpdate: jest.fn(),
30
+ find: jest.fn(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
31
+ return [2, processRecords];
32
+ }); }); }),
33
+ directFind: jest.fn(function (_a) {
34
+ var filters = _a.filters;
35
+ return tslib_1.__awaiter(void 0, void 0, void 0, function () {
36
+ var isTerminateLookup;
37
+ return tslib_1.__generator(this, function (_b) {
38
+ isTerminateLookup = filters.some(function (_a) {
39
+ var _b = tslib_1.__read(_a, 3), field = _b[0], value = _b[2];
40
+ return field === 'approved' && value === 'terminate';
41
+ });
42
+ return [2, isTerminateLookup ? terminateRecords : []];
43
+ });
44
+ });
45
+ })
46
+ },
47
+ pepsico_material: {
48
+ find: jest.fn(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
49
+ return [2, []];
50
+ }); }); }),
51
+ directUpdate: jest.fn()
52
+ }
53
+ };
54
+ return {
55
+ objects: objects,
56
+ ctx: {
57
+ meta: { user: { userId: userId } },
58
+ getObject: jest.fn(function (name) { return objects[name]; })
59
+ }
60
+ };
61
+ };
62
+ describe('中止审核证明文件', function () {
63
+ it('首次中止时新增中止记录并写入证明文件', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
64
+ var _a, ctx, objects;
65
+ return tslib_1.__generator(this, function (_b) {
66
+ switch (_b.label) {
67
+ case 0:
68
+ _a = createCtx(), ctx = _a.ctx, objects = _a.objects;
69
+ return [4, (0, approval_engine_1.terminate)(ctx, 'approval-1', '原因', [{ value: 'f1' }, { value: 'f2' }])];
70
+ case 1:
71
+ _b.sent();
72
+ expect(objects.pepsico_approval_process.insert).toHaveBeenCalledWith(expect.objectContaining({
73
+ owner: 'owner-1',
74
+ current_step: consts_1.Step.conclusion,
75
+ approved: 'terminate',
76
+ name: '原因',
77
+ attachments: ['f1', 'f2']
78
+ }));
79
+ return [2];
80
+ }
81
+ });
82
+ }); });
83
+ it('不上传证明文件时也能中止', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
84
+ var _a, ctx, objects;
85
+ return tslib_1.__generator(this, function (_b) {
86
+ switch (_b.label) {
87
+ case 0:
88
+ _a = createCtx(), ctx = _a.ctx, objects = _a.objects;
89
+ return [4, (0, approval_engine_1.terminate)(ctx, 'approval-1', '原因')];
90
+ case 1:
91
+ _b.sent();
92
+ expect(objects.pepsico_approval_process.insert).toHaveBeenCalledWith(expect.objectContaining({ attachments: [] }));
93
+ return [2];
94
+ }
95
+ });
96
+ }); });
97
+ it('已有中止记录时合并证明文件,不重复新增记录', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
98
+ var _a, ctx, objects;
99
+ return tslib_1.__generator(this, function (_b) {
100
+ switch (_b.label) {
101
+ case 0:
102
+ _a = createCtx({ terminateRecords: [{ _id: 'p1', attachments: ['f1'] }] }), ctx = _a.ctx, objects = _a.objects;
103
+ return [4, (0, approval_engine_1.terminate)(ctx, 'approval-1', '原因2', 'f1,f3')];
104
+ case 1:
105
+ _b.sent();
106
+ expect(objects.pepsico_approval_process.insert).not.toHaveBeenCalled();
107
+ expect(objects.pepsico_approval_process.directUpdate).toHaveBeenCalledWith('p1', expect.objectContaining({
108
+ name: '原因2',
109
+ attachments: ['f1', 'f3']
110
+ }));
111
+ return [2];
112
+ }
113
+ });
114
+ }); });
115
+ });
116
+ describe('跳过审核证明文件', function () {
117
+ var callBypass = function (ctx, params) { return bypassApproval_1.bypassApproval.handler.call({
118
+ getObject: ctx.getObject,
119
+ getLogger: function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
120
+ return [2, ({ info: jest.fn() })];
121
+ }); }); },
122
+ approvalContent: jest.fn()
123
+ }, Object.assign(ctx, { params: params })); };
124
+ it('更新为跳过状态的历史记录上合并写入证明文件', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
125
+ var _a, ctx, objects;
126
+ return tslib_1.__generator(this, function (_b) {
127
+ switch (_b.label) {
128
+ case 0:
129
+ _a = createCtx({
130
+ userId: 'reviewer-1',
131
+ processRecords: [{ _id: 'p1', type: 'CA', attachments: ['f1'] }]
132
+ }), ctx = _a.ctx, objects = _a.objects;
133
+ return [4, callBypass(ctx, { recordId: 'approval-1', reason: '跳过原因', attachments: [{ value: 'f1' }, { value: 'f2' }] })];
134
+ case 1:
135
+ _b.sent();
136
+ expect(objects.pepsico_approval_process.update).toHaveBeenCalledWith('p1', expect.objectContaining({
137
+ approved: 'pass',
138
+ name: '跳过原因',
139
+ attachments: ['f1', 'f2']
140
+ }));
141
+ return [2];
142
+ }
143
+ });
144
+ }); });
145
+ it('不上传证明文件时也能跳过', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
146
+ var _a, ctx, objects;
147
+ return tslib_1.__generator(this, function (_b) {
148
+ switch (_b.label) {
149
+ case 0:
150
+ _a = createCtx({
151
+ userId: 'reviewer-1',
152
+ processRecords: [{ _id: 'p1', type: 'CA' }]
153
+ }), ctx = _a.ctx, objects = _a.objects;
154
+ return [4, callBypass(ctx, { recordId: 'approval-1', reason: '跳过原因' })];
155
+ case 1:
156
+ _b.sent();
157
+ expect(objects.pepsico_approval_process.update).toHaveBeenCalledWith('p1', expect.objectContaining({ attachments: [] }));
158
+ return [2];
159
+ }
160
+ });
161
+ }); });
162
+ });
163
+ //# sourceMappingURL=terminateBypassAttachments.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminateBypassAttachments.test.js","sourceRoot":"","sources":["../../../src/methods/__tests__/terminateBypassAttachments.test.ts"],"names":[],"mappings":"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"}
@@ -17,7 +17,7 @@ export declare const hasNonPreReviewDepartments: (materialApproval: MaterialAppr
17
17
  export declare const areDepartmentReviewsComplete: (materialApproval: MaterialApproval) => boolean;
18
18
  export declare const getDepartmentEffectiveStatuses: (materialApproval: MaterialApproval) => (boolean | string)[];
19
19
  export declare const advanceApproval: (ctx: any, recordId: any, currentStepApprovalStatus: ApprovalStatus) => Promise<{}>;
20
- export declare const terminate: (ctx: any, recordId: any, description: string) => Promise<{}>;
20
+ export declare const terminate: (ctx: any, recordId: any, description: string, attachments?: any) => Promise<{}>;
21
21
  export declare const confirmDeployment: (ctx: any, recordId: any, data?: {
22
22
  content_rule: any;
23
23
  }) => Promise<{}>;
@@ -14,6 +14,7 @@ var approval_cc_1 = require("./approval_cc");
14
14
  var agent_1 = require("./agent");
15
15
  var const_1 = require("../const");
16
16
  var pls_1 = require("./pls");
17
+ var attachment_1 = require("./attachment");
17
18
  var _ = require("lodash");
18
19
  var getDefApproverStepRule = function (ctx) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
19
20
  var rules, rule;
@@ -1569,77 +1570,102 @@ var advanceApproval = function (ctx, recordId, currentStepApprovalStatus) { retu
1569
1570
  });
1570
1571
  }); };
1571
1572
  exports.advanceApproval = advanceApproval;
1572
- var terminate = function (ctx, recordId, description) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
1573
- var user, record, records, records_1, records_1_1, process_2, e_11_1;
1574
- var e_11, _a;
1575
- return tslib_1.__generator(this, function (_b) {
1576
- switch (_b.label) {
1573
+ var terminate = function (ctx, recordId, description, attachments) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
1574
+ var user, record, _a, terminateRecord, records, records_1, records_1_1, process_2, e_11_1;
1575
+ var e_11, _b;
1576
+ return tslib_1.__generator(this, function (_c) {
1577
+ switch (_c.label) {
1577
1578
  case 0:
1578
1579
  user = ctx.meta.user;
1579
1580
  return [4, ctx.getObject('pepsico_material_approval').findOne(recordId)];
1580
1581
  case 1:
1581
- record = _b.sent();
1582
- if (!(record.owner === user.userId || user.is_space_admin || (0, lodash_1.includes)(record.person_pending_approve, user.userId))) return [3, 13];
1583
- return [4, ctx.getObject('pepsico_approval_process').insert({
1584
- pepsico_material_approval: record._id,
1585
- current_step: consts_1.Step.conclusion,
1586
- owner: user.userId,
1587
- space: record.space,
1588
- created: new Date(),
1589
- created_by: user.userId,
1590
- modified: new Date(),
1591
- modified_by: user.userId,
1592
- approvalStatus: 'terminate',
1593
- name: description
1582
+ record = _c.sent();
1583
+ if (!(record.owner === user.userId || user.is_space_admin || (0, lodash_1.includes)(record.person_pending_approve, user.userId))) return [3, 17];
1584
+ return [4, ctx.getObject('pepsico_approval_process').directFind({
1585
+ filters: [
1586
+ ['pepsico_material_approval', '=', record._id],
1587
+ ['current_step', '=', consts_1.Step.conclusion],
1588
+ ['owner', '=', user.userId],
1589
+ ['approved', '=', 'terminate']
1590
+ ],
1591
+ sort: 'created desc',
1592
+ top: 1
1594
1593
  })];
1595
1594
  case 2:
1596
- _b.sent();
1597
- return [4, ctx.getObject('pepsico_approval_process').directFind({
1598
- filters: [['pepsico_material_approval', '=', record._id], ['approved', '=', 'progess']]
1595
+ _a = tslib_1.__read.apply(void 0, [_c.sent(), 1]), terminateRecord = _a[0];
1596
+ if (!terminateRecord) return [3, 4];
1597
+ return [4, ctx.getObject('pepsico_approval_process').directUpdate(terminateRecord._id, {
1598
+ modified: new Date(),
1599
+ modified_by: user.userId,
1600
+ name: description,
1601
+ attachments: (0, attachment_1.mergeFileIds)(terminateRecord.attachments, attachments)
1599
1602
  })];
1600
1603
  case 3:
1601
- records = _b.sent();
1602
- _b.label = 4;
1603
- case 4:
1604
- _b.trys.push([4, 9, 10, 11]);
1605
- records_1 = tslib_1.__values(records), records_1_1 = records_1.next();
1606
- _b.label = 5;
1604
+ _c.sent();
1605
+ return [3, 6];
1606
+ case 4: return [4, ctx.getObject('pepsico_approval_process').insert({
1607
+ pepsico_material_approval: record._id,
1608
+ current_step: consts_1.Step.conclusion,
1609
+ owner: user.userId,
1610
+ space: record.space,
1611
+ created: new Date(),
1612
+ created_by: user.userId,
1613
+ modified: new Date(),
1614
+ modified_by: user.userId,
1615
+ approvalStatus: 'terminate',
1616
+ approved: 'terminate',
1617
+ name: description,
1618
+ attachments: (0, attachment_1.mergeFileIds)([], attachments)
1619
+ })];
1607
1620
  case 5:
1608
- if (!!records_1_1.done) return [3, 8];
1621
+ _c.sent();
1622
+ _c.label = 6;
1623
+ case 6: return [4, ctx.getObject('pepsico_approval_process').directFind({
1624
+ filters: [['pepsico_material_approval', '=', record._id], ['approved', '=', 'progess']]
1625
+ })];
1626
+ case 7:
1627
+ records = _c.sent();
1628
+ _c.label = 8;
1629
+ case 8:
1630
+ _c.trys.push([8, 13, 14, 15]);
1631
+ records_1 = tslib_1.__values(records), records_1_1 = records_1.next();
1632
+ _c.label = 9;
1633
+ case 9:
1634
+ if (!!records_1_1.done) return [3, 12];
1609
1635
  process_2 = records_1_1.value;
1610
1636
  return [4, ctx.getObject('pepsico_approval_process').directUpdate(process_2._id, {
1611
1637
  approved: '',
1612
1638
  modified: new Date(),
1613
1639
  modified_by: user.userId,
1614
1640
  })];
1615
- case 6:
1616
- _b.sent();
1617
- _b.label = 7;
1618
- case 7:
1641
+ case 10:
1642
+ _c.sent();
1643
+ _c.label = 11;
1644
+ case 11:
1619
1645
  records_1_1 = records_1.next();
1620
- return [3, 5];
1621
- case 8: return [3, 11];
1622
- case 9:
1623
- e_11_1 = _b.sent();
1646
+ return [3, 9];
1647
+ case 12: return [3, 15];
1648
+ case 13:
1649
+ e_11_1 = _c.sent();
1624
1650
  e_11 = { error: e_11_1 };
1625
- return [3, 11];
1626
- case 10:
1651
+ return [3, 15];
1652
+ case 14:
1627
1653
  try {
1628
- if (records_1_1 && !records_1_1.done && (_a = records_1.return)) _a.call(records_1);
1654
+ if (records_1_1 && !records_1_1.done && (_b = records_1.return)) _b.call(records_1);
1629
1655
  }
1630
1656
  finally { if (e_11) throw e_11.error; }
1631
1657
  return [7];
1632
- case 11: return [4, ctx.getObject('pepsico_material_approval').update(recordId, {
1658
+ case 15: return [4, ctx.getObject('pepsico_material_approval').update(recordId, {
1633
1659
  current_step: consts_1.Step.conclusion,
1634
1660
  review_status: consts_1.ReviewStatus.terminated,
1635
1661
  termination_date: new Date(),
1636
1662
  person_pending_approve: [],
1637
1663
  termination_type: record.owner === user.userId ? '发起人中止' : '审批人中止'
1638
1664
  })];
1639
- case 12:
1640
- _b.sent();
1665
+ case 16:
1666
+ _c.sent();
1641
1667
  return [2, {}];
1642
- case 13: throw new Error('Sorry, you don’t have permission to terminate the review.');
1668
+ case 17: throw new Error('Sorry, you don’t have permission to terminate the review.');
1643
1669
  }
1644
1670
  });
1645
1671
  }); };