@steedos-labs/content-compliance 0.8.7 → 0.8.9

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 (188) hide show
  1. package/dist/index.js +1 -1
  2. package/lib/actions/bypassApproval.js +18 -0
  3. package/lib/actions/bypassApproval.js.map +1 -1
  4. package/lib/actions/bypassMaterial.js +12 -0
  5. package/lib/actions/bypassMaterial.js.map +1 -1
  6. package/lib/index.js +128 -0
  7. package/lib/index.js.map +1 -1
  8. package/lib/methods/AI.d.ts +6 -0
  9. package/lib/methods/AI.js +116 -15
  10. package/lib/methods/AI.js.map +1 -1
  11. package/lib/methods/__tests__/plsReview.test.d.ts +1 -0
  12. package/lib/methods/__tests__/plsReview.test.js +428 -0
  13. package/lib/methods/__tests__/plsReview.test.js.map +1 -0
  14. package/lib/methods/__tests__/postponeReview.test.js +21 -0
  15. package/lib/methods/__tests__/postponeReview.test.js.map +1 -1
  16. package/lib/methods/__tests__/qcParallelReview.test.d.ts +1 -0
  17. package/lib/methods/__tests__/qcParallelReview.test.js +53 -0
  18. package/lib/methods/__tests__/qcParallelReview.test.js.map +1 -0
  19. package/lib/methods/__tests__/qcPreReview.test.d.ts +1 -0
  20. package/lib/methods/__tests__/qcPreReview.test.js +65 -0
  21. package/lib/methods/__tests__/qcPreReview.test.js.map +1 -0
  22. package/lib/methods/approval_engine.d.ts +4 -0
  23. package/lib/methods/approval_engine.js +388 -221
  24. package/lib/methods/approval_engine.js.map +1 -1
  25. package/lib/methods/consts.d.ts +35 -0
  26. package/lib/methods/consts.js +2 -0
  27. package/lib/methods/consts.js.map +1 -1
  28. package/lib/methods/material.js +13 -0
  29. package/lib/methods/material.js.map +1 -1
  30. package/lib/methods/pls.d.ts +31 -0
  31. package/lib/methods/pls.js +429 -130
  32. package/lib/methods/pls.js.map +1 -1
  33. package/lib/pages/__tests__/aiReviewCardStyles.test.d.ts +1 -0
  34. package/lib/pages/__tests__/aiReviewCardStyles.test.js +29 -0
  35. package/lib/pages/__tests__/aiReviewCardStyles.test.js.map +1 -0
  36. package/lib/pages/__tests__/aiReviewChineseColons.test.d.ts +1 -0
  37. package/lib/pages/__tests__/aiReviewChineseColons.test.js +132 -0
  38. package/lib/pages/__tests__/aiReviewChineseColons.test.js.map +1 -0
  39. package/lib/pages/__tests__/clientCssCacheVersion.test.d.ts +1 -0
  40. package/lib/pages/__tests__/clientCssCacheVersion.test.js +31 -0
  41. package/lib/pages/__tests__/clientCssCacheVersion.test.js.map +1 -0
  42. package/lib/pages/__tests__/materialDetailAIReviewFilter.test.d.ts +1 -0
  43. package/lib/pages/__tests__/materialDetailAIReviewFilter.test.js +51 -0
  44. package/lib/pages/__tests__/materialDetailAIReviewFilter.test.js.map +1 -0
  45. package/lib/pages/__tests__/plsReviewCardStyles.test.d.ts +1 -0
  46. package/lib/pages/__tests__/plsReviewCardStyles.test.js +98 -0
  47. package/lib/pages/__tests__/plsReviewCardStyles.test.js.map +1 -0
  48. package/lib/pages/__tests__/plsReviewPage.test.d.ts +1 -0
  49. package/lib/pages/__tests__/plsReviewPage.test.js +249 -0
  50. package/lib/pages/__tests__/plsReviewPage.test.js.map +1 -0
  51. package/main/default/applications/pepsico_content_setting.app.yml +4 -0
  52. package/main/default/client/pepsico_content.client.js +8 -3
  53. package/main/default/objects/ai_process_detail/ai_process_detail.object.yml +1 -0
  54. package/main/default/objects/ai_process_detail/fields/pls_extracted_data.field.yml +9 -0
  55. package/main/default/objects/ai_process_detail/fields/pls_file_ids.field.yml +9 -0
  56. package/main/default/objects/ai_process_detail/fields/pls_product_name_matched.field.yml +9 -0
  57. package/main/default/objects/ai_process_detail/fields/pls_rule_unique_matched.field.yml +9 -0
  58. package/main/default/objects/pepesio_ch__c/fields/company_id.field.yml +14 -0
  59. package/main/default/objects/pepesio_ch__c/fields/company_ids.field.yml +16 -0
  60. package/main/default/objects/pepesio_ch__c/fields/created.field.yml +10 -0
  61. package/main/default/objects/pepesio_ch__c/fields/created_by.field.yml +9 -0
  62. package/main/default/objects/pepesio_ch__c/fields/file_name.field.yml +8 -0
  63. package/main/default/objects/pepesio_ch__c/fields/instance_state.field.yml +25 -0
  64. package/main/default/objects/pepesio_ch__c/fields/locked.field.yml +12 -0
  65. package/main/default/objects/pepesio_ch__c/fields/material_type.field.yml +10 -0
  66. package/main/default/objects/pepesio_ch__c/fields/media_type.field.yml +13 -0
  67. package/main/default/objects/pepesio_ch__c/fields/modified.field.yml +10 -0
  68. package/main/default/objects/pepesio_ch__c/fields/modified_by.field.yml +9 -0
  69. package/main/default/objects/pepesio_ch__c/fields/name.field.yml +11 -0
  70. package/main/default/objects/pepesio_ch__c/fields/owner.field.yml +12 -0
  71. package/main/default/objects/pepesio_ch__c/fields/product.field.yml +10 -0
  72. package/main/default/objects/pepesio_ch__c/fields/time.field.yml +8 -0
  73. package/main/default/objects/pepesio_ch__c/fields/type.field.yml +22 -0
  74. package/main/default/objects/pepesio_ch__c/listviews/all.listview.yml +21 -0
  75. package/main/default/objects/pepesio_ch__c/listviews/recent.listview.yml +11 -0
  76. package/main/default/objects/pepesio_ch__c/pepesio_ch__c.object.yml +31 -0
  77. package/main/default/objects/pepesio_ch__c/permissions/admin.permission.yml +9 -0
  78. package/main/default/objects/pepesio_ch__c/permissions/user.permission.yml +9 -0
  79. package/main/default/objects/pepsico_ai_review/buttons/pepsico_adopt.button.yml +3 -3
  80. package/main/default/objects/pepsico_ai_review/fields/is_active.field.yml +7 -0
  81. package/main/default/objects/pepsico_ai_review/fields/pepsico_material_approval.field.yml +7 -0
  82. package/main/default/objects/pepsico_ai_review/fields/pls_file.field.yml +7 -0
  83. package/main/default/objects/pepsico_ai_review/fields/review_type.field.yml +12 -0
  84. package/main/default/objects/pepsico_approval_process/fields/type.field.yml +5 -1
  85. package/main/default/objects/pepsico_km_pls/fields/allergen_statement.field.yml +9 -0
  86. package/main/default/objects/pepsico_km_pls/fields/ingredient_list.field.yml +9 -0
  87. package/main/default/objects/pepsico_km_pls/listviews/all.listview.yml +6 -0
  88. package/main/default/objects/pepsico_km_pls_file/listviews/lookup.listview.yml +19 -0
  89. package/main/default/objects/pepsico_km_pls_file/permissions/user.permission.yml +2 -2
  90. package/main/default/objects/pepsico_material/buttons/pepsico_material_spot_check.button.yml +1 -1
  91. package/main/default/objects/pepsico_material/fields/kol_classification.field.yml +2 -1
  92. package/main/default/objects/pepsico_material/fields/pre_qc_approval_status.field.yml +16 -0
  93. package/main/default/objects/pepsico_material/fields/qc_approval_status.field.yml +16 -0
  94. package/main/default/objects/pepsico_material/fields/qc_bypass_reason.field.yml +11 -0
  95. package/main/default/objects/pepsico_material/fields/qc_bypassed.field.yml +12 -0
  96. package/main/default/objects/pepsico_material/fields/qc_bypassed_at.field.yml +11 -0
  97. package/main/default/objects/pepsico_material/fields/qc_bypassed_by.field.yml +12 -0
  98. package/main/default/objects/pepsico_material/listviews/all.listview.yml +2 -0
  99. package/main/default/objects/pepsico_material/listviews/dco_spot_check.listview.yml +31 -0
  100. package/main/default/objects/pepsico_material/listviews/kol_midtier.listview.yml +31 -0
  101. package/main/default/objects/pepsico_material/listviews/spot_check.listview.yml +31 -0
  102. package/main/default/objects/pepsico_material_approval/buttons/pepsico_modify_pls.button.yml +70 -0
  103. package/main/default/objects/pepsico_material_approval/buttons/pepsico_postpone_review.button.yml +62 -37
  104. package/main/default/objects/pepsico_material_approval/buttons/pre_review_approve.button.yml +1 -1
  105. package/main/default/objects/pepsico_material_approval/buttons/pre_review_reject.button.yml +1 -1
  106. package/main/default/objects/pepsico_material_approval/fields/approved_flows.field.yml +2 -2
  107. package/main/default/objects/pepsico_material_approval/fields/assistance.field.yml +1 -1
  108. package/main/default/objects/pepsico_material_approval/fields/ca_assistance.field.yml +1 -1
  109. package/main/default/objects/pepsico_material_approval/fields/classification.field.yml +26 -11
  110. package/main/default/objects/pepsico_material_approval/fields/ec_check_food_name.field.yml +18 -0
  111. package/main/default/objects/pepsico_material_approval/fields/ec_check_ingredients.field.yml +18 -0
  112. package/main/default/objects/pepsico_material_approval/fields/ec_check_net_content.field.yml +18 -0
  113. package/main/default/objects/pepsico_material_approval/fields/ec_check_producer_address.field.yml +18 -0
  114. package/main/default/objects/pepsico_material_approval/fields/ec_check_producer_name.field.yml +18 -0
  115. package/main/default/objects/pepsico_material_approval/fields/ec_check_shelf_life.field.yml +18 -0
  116. package/main/default/objects/pepsico_material_approval/fields/ec_check_standard_code.field.yml +18 -0
  117. package/main/default/objects/pepsico_material_approval/fields/ec_check_storage_condition.field.yml +18 -0
  118. package/main/default/objects/pepsico_material_approval/fields/ec_has_detail_page.field.yml +18 -0
  119. package/main/default/objects/pepsico_material_approval/fields/ec_producers.$.field.yml +5 -0
  120. package/main/default/objects/pepsico_material_approval/fields/ec_producers.$.producer_address.field.yml +7 -0
  121. package/main/default/objects/pepsico_material_approval/fields/ec_producers.$.producer_name.field.yml +7 -0
  122. package/main/default/objects/pepsico_material_approval/fields/ec_producers.field.yml +16 -0
  123. package/main/default/objects/pepsico_material_approval/fields/ec_qc_production_email.field.yml +16 -0
  124. package/main/default/objects/pepsico_material_approval/fields/ec_related_approval.field.yml +9 -0
  125. package/main/default/objects/pepsico_material_approval/fields/followers.field.yml +4 -4
  126. package/main/default/objects/pepsico_material_approval/fields/form_version.field.yml +10 -0
  127. package/main/default/objects/pepsico_material_approval/fields/handler_preca.field.yml +1 -1
  128. package/main/default/objects/pepsico_material_approval/fields/handler_preguding.field.yml +1 -1
  129. package/main/default/objects/pepsico_material_approval/fields/handler_prens.field.yml +1 -1
  130. package/main/default/objects/pepsico_material_approval/fields/handler_preqc.field.yml +22 -0
  131. package/main/default/objects/pepsico_material_approval/fields/handler_presra.field.yml +1 -1
  132. package/main/default/objects/pepsico_material_approval/fields/handler_qc.field.yml +20 -0
  133. package/main/default/objects/pepsico_material_approval/fields/has_nutrition_table.field.yml +18 -0
  134. package/main/default/objects/pepsico_material_approval/fields/internal_collaborator.field.yml +1 -1
  135. package/main/default/objects/pepsico_material_approval/fields/internal_collaborator_edit.field.yml +1 -1
  136. package/main/default/objects/pepsico_material_approval/fields/kol_classification.field.yml +2 -1
  137. package/main/default/objects/pepsico_material_approval/fields/legal_assistance.field.yml +1 -1
  138. package/main/default/objects/pepsico_material_approval/fields/ns_assistance.field.yml +1 -1
  139. package/main/default/objects/pepsico_material_approval/fields/pls_file.field.yml +2 -2
  140. package/main/default/objects/pepsico_material_approval/fields/pls_km_files.field.yml +28 -0
  141. package/main/default/objects/pepsico_material_approval/fields/pls_upload_files.field.yml +21 -0
  142. package/main/default/objects/pepsico_material_approval/fields/pre_ca_reviewer.field.yml +1 -1
  143. package/main/default/objects/pepsico_material_approval/fields/pre_ns_reviewer.field.yml +1 -1
  144. package/main/default/objects/pepsico_material_approval/fields/pre_qc_approval_status.field.yml +17 -0
  145. package/main/default/objects/pepsico_material_approval/fields/pre_qc_materials_quantity.field.yml +21 -0
  146. package/main/default/objects/pepsico_material_approval/fields/pre_qc_reviewer.field.yml +19 -0
  147. package/main/default/objects/pepsico_material_approval/fields/pre_reviewer.field.yml +1 -1
  148. package/main/default/objects/pepsico_material_approval/fields/pre_sra_reviewer.field.yml +1 -1
  149. package/main/default/objects/pepsico_material_approval/fields/product.field.yml +25 -10
  150. package/main/default/objects/pepsico_material_approval/fields/qc_approval_status.field.yml +18 -0
  151. package/main/default/objects/pepsico_material_approval/fields/qc_assistance.field.yml +22 -0
  152. package/main/default/objects/pepsico_material_approval/fields/qc_bypass_reason.field.yml +8 -0
  153. package/main/default/objects/pepsico_material_approval/fields/qc_bypassed.field.yml +12 -0
  154. package/main/default/objects/pepsico_material_approval/fields/qc_bypassed_at.field.yml +8 -0
  155. package/main/default/objects/pepsico_material_approval/fields/qc_bypassed_by.field.yml +8 -0
  156. package/main/default/objects/pepsico_material_approval/fields/qc_materials_quantity.field.yml +21 -0
  157. package/main/default/objects/pepsico_material_approval/fields/qc_reviewer.field.yml +22 -0
  158. package/main/default/objects/pepsico_material_approval/fields/social_media.field.yml +2 -2
  159. package/main/default/objects/pepsico_material_approval/fields/sra_assistance.field.yml +1 -1
  160. package/main/default/objects/pepsico_material_approval/listviews/all.listview.yml +2 -0
  161. package/main/default/objects/pepsico_material_approval/pepsico_material_approval.object.yml +4 -0
  162. package/main/default/objects/pepsico_pls_change_log/fields/after_pls_files.field.yml +9 -0
  163. package/main/default/objects/pepsico_pls_change_log/fields/after_pls_names.field.yml +7 -0
  164. package/main/default/objects/pepsico_pls_change_log/fields/approval.field.yml +7 -0
  165. package/main/default/objects/pepsico_pls_change_log/fields/approval_name.field.yml +6 -0
  166. package/main/default/objects/pepsico_pls_change_log/fields/before_pls_files.field.yml +9 -0
  167. package/main/default/objects/pepsico_pls_change_log/fields/before_pls_names.field.yml +7 -0
  168. package/main/default/objects/pepsico_pls_change_log/fields/material.field.yml +8 -0
  169. package/main/default/objects/pepsico_pls_change_log/fields/operator.field.yml +7 -0
  170. package/main/default/objects/pepsico_pls_change_log/fields/scene.field.yml +13 -0
  171. package/main/default/objects/pepsico_pls_change_log/fields/source.field.yml +14 -0
  172. package/main/default/objects/pepsico_pls_change_log/fields/space.field.yml +6 -0
  173. package/main/default/objects/pepsico_pls_change_log/listviews/all.listview.yml +25 -0
  174. package/main/default/objects/pepsico_pls_change_log/pepsico_pls_change_log.object.yml +16 -0
  175. package/main/default/objects/pepsico_pls_change_log/permissions/admin.permission.yml +15 -0
  176. package/main/default/objects/pepsico_pls_change_log/permissions/user.permission.yml +14 -0
  177. package/main/default/objects/pepsico_review_postpone/fields/department_type.field.yml +4 -0
  178. package/main/default/objects/pepsico_reviewer/fields/pre_qc_reviewer.field.yml +10 -0
  179. package/main/default/objects/pepsico_reviewer/fields/qc_assistance.field.yml +14 -0
  180. package/main/default/objects/pepsico_reviewer/fields/qc_reviewer.field.yml +12 -0
  181. package/main/default/objects/pepsico_reviewer/listviews/all.listview.yml +4 -0
  182. package/main/default/pages/pepsico_content_review_detail.page.amis.json +19 -1
  183. package/main/default/pages/pepsico_material_detail.page.amis.json +623 -41
  184. package/main/default/pages/pepsico_material_detail_mobile.page.amis.json +307 -3
  185. package/main/default/tabs/object_pepsico_pls_change_log.tab.yml +14 -0
  186. package/main/default/triggers/pepsico_material_approval_change.trigger.yml +3 -0
  187. package/package.json +1 -1
  188. package/public/content-review/amis.css +338 -8
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var _a, _b, _c;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.postponeReview = exports.getPostponeReviewDepartmentType = exports.hasReviewed = exports.submitContent = exports.submitPreReviewContent = exports.submitKidsContent = exports.rejectContent = exports.approvalContent = exports.postponeDeployment = exports.confirmDeployment = exports.terminate = exports.advanceApproval = exports.hasNonPreReviewDepartments = exports.getPreReviewStatuses = exports.getDeptEffectiveStatus = exports.isDeptReviewComplete = exports.hasAnyPreReviewer = exports.getApproverStepRule = exports.getDefApproverStepRule = void 0;
4
+ exports.postponeReview = exports.getPostponeReviewDepartmentType = exports.hasReviewed = exports.submitContent = exports.submitPreReviewContent = exports.submitKidsContent = exports.rejectContent = exports.approvalContent = exports.postponeDeployment = exports.confirmDeployment = exports.terminate = exports.advanceApproval = exports.getDepartmentEffectiveStatuses = exports.areDepartmentReviewsComplete = exports.hasNonPreReviewDepartments = exports.getPreReviewStatuses = exports.needsPLSReReview = exports.needsQcReview = exports.getDeptEffectiveStatus = exports.isDeptReviewComplete = exports.hasAnyPreReviewer = exports.getApproverStepRule = exports.getDefApproverStepRule = void 0;
5
5
  var tslib_1 = require("tslib");
6
6
  var consts_1 = require("./consts");
7
7
  var amis_formula_1 = require("amis-formula");
@@ -13,6 +13,7 @@ var notification_1 = require("./notification");
13
13
  var approval_cc_1 = require("./approval_cc");
14
14
  var agent_1 = require("./agent");
15
15
  var const_1 = require("../const");
16
+ var pls_1 = require("./pls");
16
17
  var _ = require("lodash");
17
18
  var getDefApproverStepRule = function (ctx) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
18
19
  var rules, rule;
@@ -80,7 +81,8 @@ var hasAnyPreReviewer = function (materialApproval, approvalType) {
80
81
  return !!materialApproval.pre_reviewer;
81
82
  }
82
83
  return !!(materialApproval.pre_ns_reviewer || materialApproval.pre_legal_reviewer ||
83
- materialApproval.pre_sra_reviewer || materialApproval.pre_ca_reviewer);
84
+ materialApproval.pre_sra_reviewer || materialApproval.pre_ca_reviewer ||
85
+ ((0, exports.needsQcReview)(materialApproval) && materialApproval.pre_qc_reviewer));
84
86
  };
85
87
  exports.hasAnyPreReviewer = hasAnyPreReviewer;
86
88
  var isDeptReviewComplete = function (materialApproval, deptPrefix) {
@@ -146,10 +148,24 @@ var getApproveType = function (ctx, materialApproval) { return tslib_1.__awaiter
146
148
  }
147
149
  });
148
150
  }); };
151
+ var needsQcReview = function (materialApproval) {
152
+ return materialApproval.ec_has_detail_page === 'yes';
153
+ };
154
+ exports.needsQcReview = needsQcReview;
155
+ var needsPLSReReview = function (materialApproval) {
156
+ return !_.isEmpty(materialApproval.pls_km_files)
157
+ && (materialApproval.sra_approval_status === false || materialApproval.qc_approval_status === false);
158
+ };
159
+ exports.needsPLSReReview = needsPLSReReview;
160
+ var requiresPLS = function (materialApproval) {
161
+ return materialApproval.form_version === 'v2'
162
+ && (_.includes(['MD-PO1-PO15', 'SLS-PO2-PO25'], materialApproval.classification)
163
+ || materialApproval.has_nutrition_table === 'yes');
164
+ };
149
165
  var getNextStep = function (ctx, materialApproval, action) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
150
- var nextStep, _a, _b;
151
- return tslib_1.__generator(this, function (_c) {
152
- switch (_c.label) {
166
+ var nextStep, _a, _b, _c;
167
+ return tslib_1.__generator(this, function (_d) {
168
+ switch (_d.label) {
153
169
  case 0:
154
170
  nextStep = consts_1.Step.draft;
155
171
  _a = materialApproval.current_step;
@@ -159,9 +175,9 @@ var getNextStep = function (ctx, materialApproval, action) { return tslib_1.__aw
159
175
  case consts_1.Step.departmental_review: return [3, 6];
160
176
  case consts_1.Step.personnel_review: return [3, 6];
161
177
  case consts_1.Step.submitter_revisions: return [3, 7];
162
- case consts_1.Step.awaiting_deployment: return [3, 9];
178
+ case consts_1.Step.awaiting_deployment: return [3, 11];
163
179
  }
164
- return [3, 10];
180
+ return [3, 12];
165
181
  case 1:
166
182
  if (_.includes(const_1.DCO_TYPES, materialApproval.classification)) {
167
183
  nextStep = consts_1.Step.conclusion;
@@ -169,31 +185,38 @@ var getNextStep = function (ctx, materialApproval, action) { return tslib_1.__aw
169
185
  else {
170
186
  nextStep = consts_1.Step.ai_review;
171
187
  }
172
- return [3, 11];
188
+ return [3, 13];
173
189
  case 2:
174
190
  if (!(action == consts_1.ApprovalStatus.approved)) return [3, 4];
175
191
  return [4, getApproverStep(ctx, materialApproval)];
176
192
  case 3:
177
- _b = _c.sent();
193
+ _b = _d.sent();
178
194
  return [3, 5];
179
195
  case 4:
180
196
  _b = consts_1.Step.draft;
181
- _c.label = 5;
197
+ _d.label = 5;
182
198
  case 5:
183
199
  nextStep = _b;
184
- return [3, 11];
200
+ return [3, 13];
185
201
  case 6:
186
202
  nextStep = (action == consts_1.ApprovalStatus.approved || action == consts_1.ApprovalStatus.pass) ? consts_1.Step.awaiting_deployment : consts_1.Step.submitter_revisions;
187
- return [3, 11];
188
- case 7: return [4, getApproverStep(ctx, materialApproval)];
189
- case 8:
190
- nextStep = _c.sent();
191
- return [3, 11];
203
+ return [3, 13];
204
+ case 7:
205
+ if (!(0, exports.needsPLSReReview)(materialApproval)) return [3, 8];
206
+ _c = consts_1.Step.ai_review;
207
+ return [3, 10];
208
+ case 8: return [4, getApproverStep(ctx, materialApproval)];
192
209
  case 9:
193
- nextStep = consts_1.Step.conclusion;
194
- return [3, 11];
195
- case 10: return [3, 11];
210
+ _c = _d.sent();
211
+ _d.label = 10;
212
+ case 10:
213
+ nextStep = _c;
214
+ return [3, 13];
196
215
  case 11:
216
+ nextStep = consts_1.Step.conclusion;
217
+ return [3, 13];
218
+ case 12: return [3, 13];
219
+ case 13:
197
220
  console.log('[getNextStep]', JSON.stringify({
198
221
  action: action,
199
222
  nextStep: nextStep
@@ -203,7 +226,7 @@ var getNextStep = function (ctx, materialApproval, action) { return tslib_1.__aw
203
226
  });
204
227
  }); };
205
228
  var getNextApprovers = function (ctx, materialApproval, nextStep) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
206
- var approves, _a, preNsAgents, nsAgents, preLegalAgents, legalAgents, preSraAgents, sraAgents, preCaAgents, caAgents, kidsAgents, preAgents, perAgents, kidsAgents;
229
+ var approves, _a, preNsAgents, nsAgents, preLegalAgents, legalAgents, preSraAgents, sraAgents, preCaAgents, caAgents, preQcAgents, qcAgents, kidsAgents, preAgents, perAgents, kidsAgents;
207
230
  return tslib_1.__generator(this, function (_b) {
208
231
  switch (_b.label) {
209
232
  case 0:
@@ -213,23 +236,23 @@ var getNextApprovers = function (ctx, materialApproval, nextStep) { return tslib
213
236
  case consts_1.Step.draft: return [3, 1];
214
237
  case consts_1.Step.ai_review: return [3, 2];
215
238
  case consts_1.Step.departmental_review: return [3, 3];
216
- case consts_1.Step.personnel_review: return [3, 22];
217
- case consts_1.Step.submitter_revisions: return [3, 29];
218
- case consts_1.Step.awaiting_deployment: return [3, 30];
239
+ case consts_1.Step.personnel_review: return [3, 26];
240
+ case consts_1.Step.submitter_revisions: return [3, 33];
241
+ case consts_1.Step.awaiting_deployment: return [3, 34];
219
242
  }
220
- return [3, 31];
243
+ return [3, 35];
221
244
  case 1:
222
245
  approves = (0, lodash_1.concat)(approves, {
223
246
  userIds: [materialApproval.owner],
224
247
  type: consts_1.ProcessApprovalType.Others
225
248
  });
226
- return [3, 32];
249
+ return [3, 36];
227
250
  case 2:
228
251
  approves = (0, lodash_1.concat)(approves, {
229
252
  userIds: [process.env.PEPSICO_CONTENT_APPROVAL_AI_USERID],
230
253
  type: consts_1.ProcessApprovalType.AI
231
254
  });
232
- return [3, 32];
255
+ return [3, 36];
233
256
  case 3:
234
257
  console.log('[getNextApprovers] departmental_review 串行判断:', JSON.stringify({
235
258
  pre_ns_reviewer: materialApproval.pre_ns_reviewer,
@@ -240,6 +263,8 @@ var getNextApprovers = function (ctx, materialApproval, nextStep) { return tslib
240
263
  pre_sra_approval_status: materialApproval.pre_sra_approval_status,
241
264
  pre_ca_reviewer: materialApproval.pre_ca_reviewer,
242
265
  pre_ca_approval_status: materialApproval.pre_ca_approval_status,
266
+ pre_qc_reviewer: materialApproval.pre_qc_reviewer,
267
+ pre_qc_approval_status: materialApproval.pre_qc_approval_status,
243
268
  }));
244
269
  if (!(materialApproval.pre_ns_reviewer && materialApproval.pre_ns_approval_status != true && materialApproval.pre_ns_approval_status !== consts_1.ApprovalStatus.pass)) return [3, 5];
245
270
  return [4, (0, agent_1.getReviewerAgentsInfo)(ctx, materialApproval.space, [materialApproval.pre_ns_reviewer])];
@@ -297,49 +322,67 @@ var getNextApprovers = function (ctx, materialApproval, nextStep) { return tslib
297
322
  approves = (0, lodash_1.concat)(approves, tslib_1.__assign(tslib_1.__assign({}, caAgents), { type: consts_1.ProcessApprovalType.CA }));
298
323
  _b.label = 19;
299
324
  case 19:
300
- if (!(materialApproval.child_files == 'yes' && materialApproval.kids_approval_status != true && materialApproval.kids_approval_status !== consts_1.ApprovalStatus.pass)) return [3, 21];
301
- return [4, (0, agent_1.getReviewerAgentsInfo)(ctx, materialApproval.space, [materialApproval.kids_reviewer])];
325
+ if (!(0, exports.needsQcReview)(materialApproval)) return [3, 23];
326
+ if (_.isEmpty(materialApproval.qc_reviewer)) {
327
+ throw new Error('QC审核人缺失, 请确认审批单对应审核人员信息');
328
+ }
329
+ if (!(materialApproval.pre_qc_reviewer && materialApproval.pre_qc_approval_status != true && materialApproval.pre_qc_approval_status !== consts_1.ApprovalStatus.pass)) return [3, 21];
330
+ return [4, (0, agent_1.getReviewerAgentsInfo)(ctx, materialApproval.space, [materialApproval.pre_qc_reviewer])];
302
331
  case 20:
332
+ preQcAgents = _b.sent();
333
+ approves = (0, lodash_1.concat)(approves, tslib_1.__assign(tslib_1.__assign({}, preQcAgents), { type: consts_1.ProcessApprovalType.PreQC }));
334
+ return [3, 23];
335
+ case 21:
336
+ if (!(materialApproval.qc_approval_status != true && materialApproval.qc_approval_status !== consts_1.ApprovalStatus.pass)) return [3, 23];
337
+ return [4, (0, agent_1.getReviewerAgentsInfo)(ctx, materialApproval.space, materialApproval.qc_reviewer)];
338
+ case 22:
339
+ qcAgents = _b.sent();
340
+ approves = (0, lodash_1.concat)(approves, tslib_1.__assign(tslib_1.__assign({}, qcAgents), { type: consts_1.ProcessApprovalType.QC }));
341
+ _b.label = 23;
342
+ case 23:
343
+ if (!(materialApproval.child_files == 'yes' && materialApproval.kids_approval_status != true && materialApproval.kids_approval_status !== consts_1.ApprovalStatus.pass)) return [3, 25];
344
+ return [4, (0, agent_1.getReviewerAgentsInfo)(ctx, materialApproval.space, [materialApproval.kids_reviewer])];
345
+ case 24:
303
346
  kidsAgents = _b.sent();
304
347
  approves = (0, lodash_1.concat)(approves, tslib_1.__assign(tslib_1.__assign({}, kidsAgents), { type: consts_1.ProcessApprovalType.Kids }));
305
- _b.label = 21;
306
- case 21: return [3, 32];
307
- case 22:
308
- if (!(materialApproval.pre_reviewer && materialApproval.pre_approval_status != true && materialApproval.pre_approval_status !== consts_1.ApprovalStatus.pass)) return [3, 24];
348
+ _b.label = 25;
349
+ case 25: return [3, 36];
350
+ case 26:
351
+ if (!(materialApproval.pre_reviewer && materialApproval.pre_approval_status != true && materialApproval.pre_approval_status !== consts_1.ApprovalStatus.pass)) return [3, 28];
309
352
  return [4, (0, agent_1.getReviewerAgentsInfo)(ctx, materialApproval.space, [materialApproval.pre_reviewer])];
310
- case 23:
353
+ case 27:
311
354
  preAgents = _b.sent();
312
355
  approves = (0, lodash_1.concat)(approves, tslib_1.__assign(tslib_1.__assign({}, preAgents), { type: consts_1.ProcessApprovalType.Preguding }));
313
- return [3, 26];
314
- case 24:
315
- if (!(materialApproval.approval_status !== consts_1.ApprovalStatus.pass)) return [3, 26];
356
+ return [3, 30];
357
+ case 28:
358
+ if (!(materialApproval.approval_status !== consts_1.ApprovalStatus.pass)) return [3, 30];
316
359
  return [4, (0, agent_1.getReviewerAgentsInfo)(ctx, materialApproval.space, materialApproval.reviewer)];
317
- case 25:
360
+ case 29:
318
361
  perAgents = _b.sent();
319
362
  approves = (0, lodash_1.concat)(approves, tslib_1.__assign(tslib_1.__assign({}, perAgents), { type: consts_1.ProcessApprovalType.guding }));
320
- _b.label = 26;
321
- case 26:
322
- if (!(materialApproval.child_files == 'yes' && materialApproval.kids_approval_status != true && materialApproval.kids_approval_status !== consts_1.ApprovalStatus.pass)) return [3, 28];
363
+ _b.label = 30;
364
+ case 30:
365
+ if (!(materialApproval.child_files == 'yes' && materialApproval.kids_approval_status != true && materialApproval.kids_approval_status !== consts_1.ApprovalStatus.pass)) return [3, 32];
323
366
  return [4, (0, agent_1.getReviewerAgentsInfo)(ctx, materialApproval.space, [materialApproval.kids_reviewer])];
324
- case 27:
367
+ case 31:
325
368
  kidsAgents = _b.sent();
326
369
  approves = (0, lodash_1.concat)(approves, tslib_1.__assign(tslib_1.__assign({}, kidsAgents), { type: consts_1.ProcessApprovalType.Kids }));
327
- _b.label = 28;
328
- case 28: return [3, 32];
329
- case 29:
370
+ _b.label = 32;
371
+ case 32: return [3, 36];
372
+ case 33:
330
373
  approves = (0, lodash_1.concat)(approves, {
331
374
  userIds: [materialApproval.owner],
332
375
  type: consts_1.ProcessApprovalType.Others
333
376
  });
334
- return [3, 32];
335
- case 30:
377
+ return [3, 36];
378
+ case 34:
336
379
  approves = (0, lodash_1.concat)(approves, {
337
380
  userIds: [materialApproval.material_owner_id],
338
381
  type: consts_1.ProcessApprovalType.Others
339
382
  });
340
- return [3, 32];
341
- case 31: return [3, 32];
342
- case 32: return [2, (0, lodash_1.uniq)(approves)];
383
+ return [3, 36];
384
+ case 35: return [3, 36];
385
+ case 36: return [2, (0, lodash_1.uniq)(approves)];
343
386
  }
344
387
  });
345
388
  }); };
@@ -387,6 +430,9 @@ var updateUserStepStatus = function (ctx, materialApproval, _a) {
387
430
  else if (approveField === 'ca_approval_status') {
388
431
  filters.push(["type", "=", 'CA']);
389
432
  }
433
+ else if (approveField === 'qc_approval_status') {
434
+ filters.push(["type", "=", 'QC']);
435
+ }
390
436
  else if (approveField === 'sra_approval_status') {
391
437
  filters.push(["type", "=", 'SRA']);
392
438
  }
@@ -411,6 +457,9 @@ var updateUserStepStatus = function (ctx, materialApproval, _a) {
411
457
  else if (approveField === 'pre_ca_approval_status') {
412
458
  filters.push(["type", "=", 'PreCA']);
413
459
  }
460
+ else if (approveField === 'pre_qc_approval_status') {
461
+ filters.push(["type", "=", 'PreQC']);
462
+ }
414
463
  else if (approveField === 'pre_approval_status') {
415
464
  filters.push(["type", "=", 'Preguding']);
416
465
  }
@@ -736,6 +785,9 @@ var setPersonView = function (ctx, materialApproval) { return tslib_1.__awaiter(
736
785
  }
737
786
  else {
738
787
  personView = (0, lodash_1.concat)(materialApproval.sra_reviewer, materialApproval.ns_reviewer, materialApproval.ca_reviewer, materialApproval.legal_reviewer, materialApproval.sra_assistance, materialApproval.ns_assistance, materialApproval.ca_assistance, materialApproval.legal_assistance);
788
+ if ((0, exports.needsQcReview)(materialApproval)) {
789
+ personView = (0, lodash_1.concat)(personView, materialApproval.qc_reviewer, materialApproval.qc_assistance);
790
+ }
739
791
  if (materialApproval.pre_ns_reviewer)
740
792
  personView = (0, lodash_1.concat)(personView, materialApproval.pre_ns_reviewer);
741
793
  if (materialApproval.pre_legal_reviewer)
@@ -744,6 +796,8 @@ var setPersonView = function (ctx, materialApproval) { return tslib_1.__awaiter(
744
796
  personView = (0, lodash_1.concat)(personView, materialApproval.pre_sra_reviewer);
745
797
  if (materialApproval.pre_ca_reviewer)
746
798
  personView = (0, lodash_1.concat)(personView, materialApproval.pre_ca_reviewer);
799
+ if ((0, exports.needsQcReview)(materialApproval) && materialApproval.pre_qc_reviewer)
800
+ personView = (0, lodash_1.concat)(personView, materialApproval.pre_qc_reviewer);
747
801
  }
748
802
  if (materialApproval.child_files == 'yes') {
749
803
  personView = (0, lodash_1.concat)(personView, materialApproval.kids_reviewer);
@@ -767,6 +821,7 @@ var PRE_TO_FORMAL_MAPPING = {
767
821
  'pre_legal_approval_status': { reviewerField: 'legal_reviewer', type: consts_1.ProcessApprovalType.Legal, statusField: 'legal_approval_status' },
768
822
  'pre_sra_approval_status': { reviewerField: 'sra_reviewer', type: consts_1.ProcessApprovalType.SRA, statusField: 'sra_approval_status' },
769
823
  'pre_ca_approval_status': { reviewerField: 'ca_reviewer', type: consts_1.ProcessApprovalType.CA, statusField: 'ca_approval_status' },
824
+ 'pre_qc_approval_status': { reviewerField: 'qc_reviewer', type: consts_1.ProcessApprovalType.QC, statusField: 'qc_approval_status' },
770
825
  'pre_approval_status': { reviewerField: 'reviewer', type: consts_1.ProcessApprovalType.guding, statusField: 'approval_status' },
771
826
  };
772
827
  var addFormalReviewerAfterPreApproval = function (ctx, recordId, approveField, materialApproval) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
@@ -875,6 +930,9 @@ var getPreReviewStatuses = function (materialApproval) {
875
930
  if (materialApproval.pre_ca_reviewer) {
876
931
  statuses.push({ dept: 'CA', status: materialApproval.pre_ca_approval_status, preField: 'pre_ca_approval_status', deptApprovalField: 'ca_approval_status' });
877
932
  }
933
+ if ((0, exports.needsQcReview)(materialApproval) && materialApproval.pre_qc_reviewer) {
934
+ statuses.push({ dept: 'QC', status: materialApproval.pre_qc_approval_status, preField: 'pre_qc_approval_status', deptApprovalField: 'qc_approval_status' });
935
+ }
878
936
  return statuses;
879
937
  };
880
938
  exports.getPreReviewStatuses = getPreReviewStatuses;
@@ -888,16 +946,40 @@ var hasNonPreReviewDepartments = function (materialApproval) {
888
946
  return true;
889
947
  if (!materialApproval.pre_ca_reviewer && !isPositive(materialApproval.ca_approval_status))
890
948
  return true;
949
+ if ((0, exports.needsQcReview)(materialApproval) && !materialApproval.pre_qc_reviewer && !isPositive(materialApproval.qc_approval_status))
950
+ return true;
891
951
  return false;
892
952
  };
893
953
  exports.hasNonPreReviewDepartments = hasNonPreReviewDepartments;
954
+ var areDepartmentReviewsComplete = function (materialApproval) {
955
+ var baseDepartmentsComplete = (0, exports.isDeptReviewComplete)(materialApproval, 'ns')
956
+ && (0, exports.isDeptReviewComplete)(materialApproval, 'legal')
957
+ && (0, exports.isDeptReviewComplete)(materialApproval, 'sra')
958
+ && (0, exports.isDeptReviewComplete)(materialApproval, 'ca');
959
+ return baseDepartmentsComplete
960
+ && (!(0, exports.needsQcReview)(materialApproval) || (0, exports.isDeptReviewComplete)(materialApproval, 'qc'));
961
+ };
962
+ exports.areDepartmentReviewsComplete = areDepartmentReviewsComplete;
963
+ var getDepartmentEffectiveStatuses = function (materialApproval) {
964
+ var statuses = [
965
+ (0, exports.getDeptEffectiveStatus)(materialApproval, 'ns'),
966
+ (0, exports.getDeptEffectiveStatus)(materialApproval, 'legal'),
967
+ (0, exports.getDeptEffectiveStatus)(materialApproval, 'sra'),
968
+ (0, exports.getDeptEffectiveStatus)(materialApproval, 'ca')
969
+ ];
970
+ if ((0, exports.needsQcReview)(materialApproval)) {
971
+ statuses.push((0, exports.getDeptEffectiveStatus)(materialApproval, 'qc'));
972
+ }
973
+ return statuses;
974
+ };
975
+ exports.getDepartmentEffectiveStatuses = getDepartmentEffectiveStatuses;
894
976
  var advanceApproval = function (ctx, recordId, currentStepApprovalStatus) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
895
977
  var actionLabel, user, record, nextStep, skipApprover, nextApprovers, _nextApprovers, nextApprovers_2, nextApprovers_2_1, reviewer, fieldName, status, e_7_1, nextApproversUserIds_1, nextApproversClientUserIds_1, setDoc, nextApprovers_3, nextApprovers_3_1, nextApprover, e_8_1, setDoc_1, postponedUserIds_1, now, visibleAfter, pastPostponeRecords, postponedDepts, _loop_1, nextApprovers_4, nextApprovers_4_1, reviewer, e_9_1, currentRecord, currentPostponed, newPostponed, currentMarkerUsers, newMarkerUsers, notifyUserIds, initiator, materialOwner, error_1;
896
978
  var e_7, _a, _b, _c, e_8, _d, e_9, _e;
897
979
  return tslib_1.__generator(this, function (_f) {
898
980
  switch (_f.label) {
899
981
  case 0:
900
- _f.trys.push([0, 99, , 100]);
982
+ _f.trys.push([0, 106, , 107]);
901
983
  actionLabel = '请查看';
902
984
  user = ctx.meta.user;
903
985
  return [4, ctx.getObject('pepsico_material_approval').findOne(recordId)];
@@ -1071,206 +1153,234 @@ var advanceApproval = function (ctx, recordId, currentStepApprovalStatus) { retu
1071
1153
  })];
1072
1154
  case 31:
1073
1155
  _f.sent();
1074
- if (!(nextStep === consts_1.Step.ai_review)) return [3, 33];
1075
- console.time('callAIReview: ' + recordId);
1076
- return [4, (0, AI_1.callAIReview)(ctx, recordId)];
1156
+ if (!(nextStep === consts_1.Step.ai_review)) return [3, 34];
1157
+ if (!(record.current_step === consts_1.Step.submitter_revisions)) return [3, 33];
1158
+ return [4, (0, pls_1.invalidatePLSReviews)(ctx, recordId)];
1077
1159
  case 32:
1078
1160
  _f.sent();
1079
- console.timeEnd('callAIReview: ' + recordId);
1080
1161
  _f.label = 33;
1081
1162
  case 33:
1082
- _f.trys.push([33, 69, 70, 71]);
1083
- nextApprovers_3 = tslib_1.__values(nextApprovers), nextApprovers_3_1 = nextApprovers_3.next();
1163
+ (0, AI_1.callAIReview)(ctx, recordId).catch(function () { });
1084
1164
  _f.label = 34;
1085
1165
  case 34:
1086
- if (!!nextApprovers_3_1.done) return [3, 68];
1166
+ _f.trys.push([34, 76, 77, 78]);
1167
+ nextApprovers_3 = tslib_1.__values(nextApprovers), nextApprovers_3_1 = nextApprovers_3.next();
1168
+ _f.label = 35;
1169
+ case 35:
1170
+ if (!!nextApprovers_3_1.done) return [3, 75];
1087
1171
  nextApprover = nextApprovers_3_1.value;
1088
- if (!(nextApprover.type === consts_1.ProcessApprovalType.CA)) return [3, 37];
1172
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.CA)) return [3, 38];
1089
1173
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1090
1174
  ca_approval_status: ''
1091
1175
  })];
1092
- case 35:
1176
+ case 36:
1093
1177
  _f.sent();
1094
1178
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['ca_approval_status', '=', false]], {
1095
1179
  ca_approval_status: ''
1096
1180
  })];
1097
- case 36:
1098
- _f.sent();
1099
- _f.label = 37;
1100
1181
  case 37:
1101
- if (!(nextApprover.type === consts_1.ProcessApprovalType.Legal)) return [3, 40];
1182
+ _f.sent();
1183
+ _f.label = 38;
1184
+ case 38:
1185
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.QC)) return [3, 41];
1186
+ return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1187
+ qc_approval_status: ''
1188
+ })];
1189
+ case 39:
1190
+ _f.sent();
1191
+ return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['qc_approval_status', '=', false]], {
1192
+ qc_approval_status: ''
1193
+ })];
1194
+ case 40:
1195
+ _f.sent();
1196
+ _f.label = 41;
1197
+ case 41:
1198
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.Legal)) return [3, 44];
1102
1199
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1103
1200
  legal_approval_status: ''
1104
1201
  })];
1105
- case 38:
1202
+ case 42:
1106
1203
  _f.sent();
1107
1204
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['legal_approval_status', '=', false]], {
1108
1205
  legal_approval_status: ''
1109
1206
  })];
1110
- case 39:
1207
+ case 43:
1111
1208
  _f.sent();
1112
- _f.label = 40;
1113
- case 40:
1114
- if (!(nextApprover.type === consts_1.ProcessApprovalType.NS)) return [3, 43];
1209
+ _f.label = 44;
1210
+ case 44:
1211
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.NS)) return [3, 47];
1115
1212
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1116
1213
  ns_approval_status: ''
1117
1214
  })];
1118
- case 41:
1215
+ case 45:
1119
1216
  _f.sent();
1120
1217
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['ns_approval_status', '=', false]], {
1121
1218
  ns_approval_status: ''
1122
1219
  })];
1123
- case 42:
1220
+ case 46:
1124
1221
  _f.sent();
1125
- _f.label = 43;
1126
- case 43:
1127
- if (!(nextApprover.type === consts_1.ProcessApprovalType.SRA)) return [3, 46];
1222
+ _f.label = 47;
1223
+ case 47:
1224
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.SRA)) return [3, 50];
1128
1225
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1129
1226
  sra_approval_status: ''
1130
1227
  })];
1131
- case 44:
1228
+ case 48:
1132
1229
  _f.sent();
1133
1230
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['sra_approval_status', '=', false]], {
1134
1231
  sra_approval_status: ''
1135
1232
  })];
1136
- case 45:
1233
+ case 49:
1137
1234
  _f.sent();
1138
- _f.label = 46;
1139
- case 46:
1140
- if (!(nextApprover.type === consts_1.ProcessApprovalType.guding)) return [3, 49];
1235
+ _f.label = 50;
1236
+ case 50:
1237
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.guding)) return [3, 53];
1141
1238
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1142
1239
  approval_status: ''
1143
1240
  })];
1144
- case 47:
1241
+ case 51:
1145
1242
  _f.sent();
1146
1243
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['approval_status', '=', false]], {
1147
1244
  approval_status: ''
1148
1245
  })];
1149
- case 48:
1246
+ case 52:
1150
1247
  _f.sent();
1151
- _f.label = 49;
1152
- case 49:
1153
- if (!(nextApprover.type === consts_1.ProcessApprovalType.Kids)) return [3, 52];
1248
+ _f.label = 53;
1249
+ case 53:
1250
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.Kids)) return [3, 56];
1154
1251
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1155
1252
  kids_approval_status: ''
1156
1253
  })];
1157
- case 50:
1254
+ case 54:
1158
1255
  _f.sent();
1159
1256
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['kids_approval_status', '=', false]], {
1160
1257
  kids_approval_status: ''
1161
1258
  })];
1162
- case 51:
1259
+ case 55:
1163
1260
  _f.sent();
1164
- _f.label = 52;
1165
- case 52:
1166
- if (!(nextApprover.type === consts_1.ProcessApprovalType.PreNS)) return [3, 55];
1261
+ _f.label = 56;
1262
+ case 56:
1263
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.PreNS)) return [3, 59];
1167
1264
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1168
1265
  pre_ns_approval_status: ''
1169
1266
  })];
1170
- case 53:
1267
+ case 57:
1171
1268
  _f.sent();
1172
1269
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['pre_ns_approval_status', '=', false]], {
1173
1270
  pre_ns_approval_status: ''
1174
1271
  })];
1175
- case 54:
1272
+ case 58:
1176
1273
  _f.sent();
1177
- _f.label = 55;
1178
- case 55:
1179
- if (!(nextApprover.type === consts_1.ProcessApprovalType.PreLegal)) return [3, 58];
1274
+ _f.label = 59;
1275
+ case 59:
1276
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.PreLegal)) return [3, 62];
1180
1277
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1181
1278
  pre_legal_approval_status: ''
1182
1279
  })];
1183
- case 56:
1280
+ case 60:
1184
1281
  _f.sent();
1185
1282
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['pre_legal_approval_status', '=', false]], {
1186
1283
  pre_legal_approval_status: ''
1187
1284
  })];
1188
- case 57:
1285
+ case 61:
1189
1286
  _f.sent();
1190
- _f.label = 58;
1191
- case 58:
1192
- if (!(nextApprover.type === consts_1.ProcessApprovalType.PreSRA)) return [3, 61];
1287
+ _f.label = 62;
1288
+ case 62:
1289
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.PreSRA)) return [3, 65];
1193
1290
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1194
1291
  pre_sra_approval_status: ''
1195
1292
  })];
1196
- case 59:
1293
+ case 63:
1197
1294
  _f.sent();
1198
1295
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['pre_sra_approval_status', '=', false]], {
1199
1296
  pre_sra_approval_status: ''
1200
1297
  })];
1201
- case 60:
1298
+ case 64:
1202
1299
  _f.sent();
1203
- _f.label = 61;
1204
- case 61:
1205
- if (!(nextApprover.type === consts_1.ProcessApprovalType.PreCA)) return [3, 64];
1300
+ _f.label = 65;
1301
+ case 65:
1302
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.PreCA)) return [3, 68];
1206
1303
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1207
1304
  pre_ca_approval_status: ''
1208
1305
  })];
1209
- case 62:
1306
+ case 66:
1210
1307
  _f.sent();
1211
1308
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['pre_ca_approval_status', '=', false]], {
1212
1309
  pre_ca_approval_status: ''
1213
1310
  })];
1214
- case 63:
1311
+ case 67:
1215
1312
  _f.sent();
1216
- _f.label = 64;
1217
- case 64:
1218
- if (!(nextApprover.type === consts_1.ProcessApprovalType.Preguding)) return [3, 67];
1313
+ _f.label = 68;
1314
+ case 68:
1315
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.PreQC)) return [3, 71];
1316
+ return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1317
+ pre_qc_approval_status: ''
1318
+ })];
1319
+ case 69:
1320
+ _f.sent();
1321
+ return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['pre_qc_approval_status', '=', false]], {
1322
+ pre_qc_approval_status: ''
1323
+ })];
1324
+ case 70:
1325
+ _f.sent();
1326
+ _f.label = 71;
1327
+ case 71:
1328
+ if (!(nextApprover.type === consts_1.ProcessApprovalType.Preguding)) return [3, 74];
1219
1329
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1220
1330
  pre_approval_status: ''
1221
1331
  })];
1222
- case 65:
1332
+ case 72:
1223
1333
  _f.sent();
1224
1334
  return [4, ctx.getObject('pepsico_material').directUpdateMany([['pepsico_material_approval', '=', recordId], ['pre_approval_status', '=', false]], {
1225
1335
  pre_approval_status: ''
1226
1336
  })];
1227
- case 66:
1337
+ case 73:
1228
1338
  _f.sent();
1229
- _f.label = 67;
1230
- case 67:
1339
+ _f.label = 74;
1340
+ case 74:
1231
1341
  nextApprovers_3_1 = nextApprovers_3.next();
1232
- return [3, 34];
1233
- case 68: return [3, 71];
1234
- case 69:
1342
+ return [3, 35];
1343
+ case 75: return [3, 78];
1344
+ case 76:
1235
1345
  e_8_1 = _f.sent();
1236
1346
  e_8 = { error: e_8_1 };
1237
- return [3, 71];
1238
- case 70:
1347
+ return [3, 78];
1348
+ case 77:
1239
1349
  try {
1240
1350
  if (nextApprovers_3_1 && !nextApprovers_3_1.done && (_d = nextApprovers_3.return)) _d.call(nextApprovers_3);
1241
1351
  }
1242
1352
  finally { if (e_8) throw e_8.error; }
1243
1353
  return [7];
1244
- case 71:
1245
- if (!(nextStep === consts_1.Step.departmental_review || nextStep === consts_1.Step.personnel_review)) return [3, 73];
1354
+ case 78:
1355
+ if (!(nextStep === consts_1.Step.departmental_review || nextStep === consts_1.Step.personnel_review)) return [3, 80];
1246
1356
  return [4, setPersonView(ctx, record)];
1247
- case 72:
1357
+ case 79:
1248
1358
  _f.sent();
1249
- _f.label = 73;
1250
- case 73:
1251
- if (!(record.current_step === consts_1.Step.departmental_review || record.current_step === consts_1.Step.personnel_review)) return [3, 75];
1359
+ _f.label = 80;
1360
+ case 80:
1361
+ if (!(record.current_step === consts_1.Step.departmental_review || record.current_step === consts_1.Step.personnel_review)) return [3, 82];
1252
1362
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1253
1363
  materials_remove_share_link_from_onedrive_status: 'pending'
1254
1364
  })];
1255
- case 74:
1365
+ case 81:
1256
1366
  _f.sent();
1257
- _f.label = 75;
1258
- case 75:
1259
- if (!(nextStep === consts_1.Step.awaiting_deployment)) return [3, 77];
1367
+ _f.label = 82;
1368
+ case 82:
1369
+ if (!(nextStep === consts_1.Step.awaiting_deployment)) return [3, 84];
1260
1370
  return [4, pendingDeployment(ctx, recordId)];
1261
- case 76:
1371
+ case 83:
1262
1372
  _f.sent();
1263
- _f.label = 77;
1264
- case 77:
1265
- if (!(nextStep === consts_1.Step.awaiting_deployment || (nextStep === consts_1.Step.conclusion && record.current_step === consts_1.Step.ai_review))) return [3, 79];
1373
+ _f.label = 84;
1374
+ case 84:
1375
+ if (!(nextStep === consts_1.Step.awaiting_deployment || (nextStep === consts_1.Step.conclusion && record.current_step === consts_1.Step.ai_review))) return [3, 86];
1266
1376
  setDoc_1 = {
1267
1377
  materials_download_from_onedrive_status: 'pending'
1268
1378
  };
1269
1379
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, setDoc_1)];
1270
- case 78:
1380
+ case 85:
1271
1381
  _f.sent();
1272
- _f.label = 79;
1273
- case 79:
1382
+ _f.label = 86;
1383
+ case 86:
1274
1384
  if (currentStepApprovalStatus === consts_1.ApprovalStatus.rejected) {
1275
1385
  actionLabel = '内容审批被驳回';
1276
1386
  }
@@ -1282,7 +1392,7 @@ var advanceApproval = function (ctx, recordId, currentStepApprovalStatus) { retu
1282
1392
  actionLabel = "\u5185\u5BB9\u5BA1\u6279\u5DF2\u901A\u8FC7\u5F85\u4E0A\u7EBF";
1283
1393
  }
1284
1394
  postponedUserIds_1 = [];
1285
- if (!(nextStep === consts_1.Step.departmental_review || nextStep === consts_1.Step.personnel_review)) return [3, 91];
1395
+ if (!(nextStep === consts_1.Step.departmental_review || nextStep === consts_1.Step.personnel_review)) return [3, 98];
1286
1396
  now = new Date();
1287
1397
  visibleAfter = new Date(now.getTime() + 3 * 24 * 60 * 60 * 1000);
1288
1398
  return [4, ctx.getObject('pepsico_review_postpone').directFind({
@@ -1291,9 +1401,9 @@ var advanceApproval = function (ctx, recordId, currentStepApprovalStatus) { retu
1291
1401
  ['is_marker', '=', true]
1292
1402
  ]
1293
1403
  })];
1294
- case 80:
1404
+ case 87:
1295
1405
  pastPostponeRecords = _f.sent();
1296
- if (!(pastPostponeRecords && pastPostponeRecords.length > 0)) return [3, 91];
1406
+ if (!(pastPostponeRecords && pastPostponeRecords.length > 0)) return [3, 98];
1297
1407
  postponedDepts = new Set(pastPostponeRecords.map(function (r) { return r.department_type; }));
1298
1408
  _loop_1 = function (reviewer) {
1299
1409
  var deptUserIds, deptMarkers, deptMarkers_1, deptMarkers_1_1, marker, e_10_1;
@@ -1344,36 +1454,36 @@ var advanceApproval = function (ctx, recordId, currentStepApprovalStatus) { retu
1344
1454
  }
1345
1455
  });
1346
1456
  };
1347
- _f.label = 81;
1348
- case 81:
1349
- _f.trys.push([81, 86, 87, 88]);
1457
+ _f.label = 88;
1458
+ case 88:
1459
+ _f.trys.push([88, 93, 94, 95]);
1350
1460
  nextApprovers_4 = tslib_1.__values(nextApprovers), nextApprovers_4_1 = nextApprovers_4.next();
1351
- _f.label = 82;
1352
- case 82:
1353
- if (!!nextApprovers_4_1.done) return [3, 85];
1461
+ _f.label = 89;
1462
+ case 89:
1463
+ if (!!nextApprovers_4_1.done) return [3, 92];
1354
1464
  reviewer = nextApprovers_4_1.value;
1355
1465
  return [5, _loop_1(reviewer)];
1356
- case 83:
1466
+ case 90:
1357
1467
  _f.sent();
1358
- _f.label = 84;
1359
- case 84:
1468
+ _f.label = 91;
1469
+ case 91:
1360
1470
  nextApprovers_4_1 = nextApprovers_4.next();
1361
- return [3, 82];
1362
- case 85: return [3, 88];
1363
- case 86:
1471
+ return [3, 89];
1472
+ case 92: return [3, 95];
1473
+ case 93:
1364
1474
  e_9_1 = _f.sent();
1365
1475
  e_9 = { error: e_9_1 };
1366
- return [3, 88];
1367
- case 87:
1476
+ return [3, 95];
1477
+ case 94:
1368
1478
  try {
1369
1479
  if (nextApprovers_4_1 && !nextApprovers_4_1.done && (_e = nextApprovers_4.return)) _e.call(nextApprovers_4);
1370
1480
  }
1371
1481
  finally { if (e_9) throw e_9.error; }
1372
1482
  return [7];
1373
- case 88:
1374
- if (!(postponedUserIds_1.length > 0)) return [3, 91];
1483
+ case 95:
1484
+ if (!(postponedUserIds_1.length > 0)) return [3, 98];
1375
1485
  return [4, ctx.getObject('pepsico_material_approval').findOne(recordId)];
1376
- case 89:
1486
+ case 96:
1377
1487
  currentRecord = _f.sent();
1378
1488
  currentPostponed = currentRecord.review_postponed_users || [];
1379
1489
  newPostponed = (0, lodash_1.compact)((0, lodash_1.uniq)((0, lodash_1.concat)(currentPostponed, postponedUserIds_1)));
@@ -1383,44 +1493,44 @@ var advanceApproval = function (ctx, recordId, currentStepApprovalStatus) { retu
1383
1493
  review_postponed_users: newPostponed,
1384
1494
  postpone_marker_users: newMarkerUsers
1385
1495
  })];
1386
- case 90:
1496
+ case 97:
1387
1497
  _f.sent();
1388
1498
  console.log("[advanceApproval] \u81EA\u52A8\u5EF6\u540E\u5BA1\u6838\u4EBA: ".concat(postponedUserIds_1, ", visibleAfter: ").concat(visibleAfter));
1389
- _f.label = 91;
1390
- case 91:
1499
+ _f.label = 98;
1500
+ case 98:
1391
1501
  notifyUserIds = postponedUserIds_1.length > 0
1392
1502
  ? nextApproversUserIds_1.filter(function (id) { return !postponedUserIds_1.includes(id); })
1393
1503
  : nextApproversUserIds_1;
1394
1504
  return [4, (0, notification_1.sendNotifications)(ctx, record, notifyUserIds, actionLabel)];
1395
- case 92:
1505
+ case 99:
1396
1506
  _f.sent();
1397
- if (!(actionLabel === '内容审批被驳回' || actionLabel === '内容审批已通过待上线')) return [3, 94];
1507
+ if (!(actionLabel === '内容审批被驳回' || actionLabel === '内容审批已通过待上线')) return [3, 101];
1398
1508
  return [4, (0, approval_cc_1.notifyApprovalCcUsers)(ctx, record, actionLabel, notification_1.sendCcNotifications, notifyUserIds)];
1399
- case 93:
1509
+ case 100:
1400
1510
  _f.sent();
1401
- _f.label = 94;
1402
- case 94:
1403
- if (!(nextStep === consts_1.Step.awaiting_deployment)) return [3, 96];
1511
+ _f.label = 101;
1512
+ case 101:
1513
+ if (!(nextStep === consts_1.Step.awaiting_deployment)) return [3, 103];
1404
1514
  initiator = record.owner;
1405
1515
  materialOwner = record.material_owner_id;
1406
- if (!(initiator && materialOwner && initiator !== materialOwner)) return [3, 96];
1516
+ if (!(initiator && materialOwner && initiator !== materialOwner)) return [3, 103];
1407
1517
  console.log("[advanceApproval] \u901A\u77E5\u53D1\u8D77\u4EBA\u5BA1\u6838\u5B8C\u6210: initiator=".concat(initiator, ", material_owner=").concat(materialOwner));
1408
1518
  return [4, (0, notification_1.sendNotifications)(ctx, record, [initiator], '审核完成')];
1409
- case 95:
1519
+ case 102:
1410
1520
  _f.sent();
1411
- _f.label = 96;
1412
- case 96:
1413
- if (!(nextStep === consts_1.Step.conclusion)) return [3, 98];
1521
+ _f.label = 103;
1522
+ case 103:
1523
+ if (!(nextStep === consts_1.Step.conclusion)) return [3, 105];
1414
1524
  return [4, (0, approval_cc_1.notifyApprovalCcUsers)(ctx, record, '内容审批已完成', notification_1.sendCcNotifications, notifyUserIds)];
1415
- case 97:
1525
+ case 104:
1416
1526
  _f.sent();
1417
- _f.label = 98;
1418
- case 98: return [2, {}];
1419
- case 99:
1527
+ _f.label = 105;
1528
+ case 105: return [2, {}];
1529
+ case 106:
1420
1530
  error_1 = _f.sent();
1421
1531
  console.error('[advanceApproval] Error:', error_1.message, error_1.stack);
1422
1532
  throw error_1;
1423
- case 100: return [2];
1533
+ case 107: return [2];
1424
1534
  }
1425
1535
  });
1426
1536
  }); };
@@ -1627,17 +1737,11 @@ var approvalContent = function (ctx, recordId, _a) {
1627
1737
  isPositive = function (status) { return status === true || status === consts_1.ApprovalStatus.approved || status === consts_1.ApprovalStatus.pass; };
1628
1738
  isPass = function (status) { return status === consts_1.ApprovalStatus.pass; };
1629
1739
  if (approvalNew.current_step === consts_1.Step.departmental_review) {
1630
- if (!(0, exports.isDeptReviewComplete)(approvalNew, 'ns') || !(0, exports.isDeptReviewComplete)(approvalNew, 'legal') ||
1631
- !(0, exports.isDeptReviewComplete)(approvalNew, 'sra') || !(0, exports.isDeptReviewComplete)(approvalNew, 'ca')) {
1740
+ if (!(0, exports.areDepartmentReviewsComplete)(approvalNew)) {
1632
1741
  console.log('[approvalContent]: 有部门审核周期未完成, 只结束当前用户审批任务,不推进审批进度.');
1633
1742
  return [2, {}];
1634
1743
  }
1635
- effectiveStatuses = [
1636
- (0, exports.getDeptEffectiveStatus)(approvalNew, 'ns'),
1637
- (0, exports.getDeptEffectiveStatus)(approvalNew, 'legal'),
1638
- (0, exports.getDeptEffectiveStatus)(approvalNew, 'sra'),
1639
- (0, exports.getDeptEffectiveStatus)(approvalNew, 'ca')
1640
- ];
1744
+ effectiveStatuses = (0, exports.getDepartmentEffectiveStatuses)(approvalNew);
1641
1745
  allPositive = effectiveStatuses.every(isPositive);
1642
1746
  if (allPositive) {
1643
1747
  allPass = effectiveStatuses.every(isPass);
@@ -1708,8 +1812,7 @@ var rejectContent = function (ctx, recordId, _a) {
1708
1812
  _b.sent();
1709
1813
  isPositive = function (status) { return status === true || status === consts_1.ApprovalStatus.approved || status === consts_1.ApprovalStatus.pass; };
1710
1814
  if (approvalNew.current_step === consts_1.Step.departmental_review) {
1711
- if (!(0, exports.isDeptReviewComplete)(approvalNew, 'ns') || !(0, exports.isDeptReviewComplete)(approvalNew, 'legal') ||
1712
- !(0, exports.isDeptReviewComplete)(approvalNew, 'sra') || !(0, exports.isDeptReviewComplete)(approvalNew, 'ca')) {
1815
+ if (!(0, exports.areDepartmentReviewsComplete)(approvalNew)) {
1713
1816
  console.log('[rejectContent]: 有部门审核周期未完成, 只结束当前用户审批任务,不推进审批进度.');
1714
1817
  return [2, {}];
1715
1818
  }
@@ -1799,6 +1902,9 @@ var submitPreReviewContent = function (ctx, recordId, currentStepApprovalStatus)
1799
1902
  else if (approval.pre_ca_reviewer === user.userId) {
1800
1903
  approveField = 'pre_ca_approval_status';
1801
1904
  }
1905
+ else if ((0, exports.needsQcReview)(approval) && approval.pre_qc_reviewer === user.userId) {
1906
+ approveField = 'pre_qc_approval_status';
1907
+ }
1802
1908
  if (!!approveField) return [3, 3];
1803
1909
  return [4, ctx.getObject("pepsico_approval_process").find({
1804
1910
  filters: [
@@ -1823,6 +1929,8 @@ var submitPreReviewContent = function (ctx, recordId, currentStepApprovalStatus)
1823
1929
  approveField = 'pre_sra_approval_status';
1824
1930
  else if (type === consts_1.ProcessApprovalType.PreCA)
1825
1931
  approveField = 'pre_ca_approval_status';
1932
+ else if (type === consts_1.ProcessApprovalType.PreQC)
1933
+ approveField = 'pre_qc_approval_status';
1826
1934
  else if (type === consts_1.ProcessApprovalType.Preguding)
1827
1935
  approveField = 'pre_approval_status';
1828
1936
  }
@@ -1848,7 +1956,7 @@ var submitPreReviewContent = function (ctx, recordId, currentStepApprovalStatus)
1848
1956
  exports.submitPreReviewContent = submitPreReviewContent;
1849
1957
  var submitContent = function (ctx, recordId, currentStepApprovalStatus, skip) {
1850
1958
  return tslib_1.__awaiter(this, void 0, void 0, function () {
1851
- var approvalNew, user, allow, aProcess, aProcess_1, aProcess_1_1, item, e_12_1, approvalType, allTrue1, allTrue, spaceUsers, owner, materials, pendingXmlToWordMaterials, pendingUploadMaterials;
1959
+ var approvalNew, user, allow, aProcess, aProcess_1, aProcess_1_1, item, e_12_1, scene, plsIdsBefore, uploadedFileIds, uploaded, plsIds, plsIdsAfter, hasExisting, hasUploaded, approvalType, allTrue1, allTrue, spaceUsers, owner, materials, pendingXmlToWordMaterials, pendingUploadMaterials;
1852
1960
  var e_12, _a;
1853
1961
  return tslib_1.__generator(this, function (_b) {
1854
1962
  switch (_b.label) {
@@ -1937,18 +2045,65 @@ var submitContent = function (ctx, recordId, currentStepApprovalStatus, skip) {
1937
2045
  _b.label = 13;
1938
2046
  case 13: return [2];
1939
2047
  case 14:
1940
- if (!(approvalNew.current_step === consts_1.Step.draft)) return [3, 22];
1941
- return [4, getApproveType(ctx, approvalNew)];
2048
+ if (!(approvalNew.current_step === consts_1.Step.draft || approvalNew.current_step === consts_1.Step.submitter_revisions)) return [3, 20];
2049
+ scene = approvalNew.current_step === consts_1.Step.draft ? 'submit' : 'resubmit';
2050
+ plsIdsBefore = _.uniq(_.compact(approvalNew.pls_km_files || []));
2051
+ uploadedFileIds = _.compact(_.map(approvalNew.pls_upload_files || [], function (item) {
2052
+ var fileItem = item;
2053
+ return typeof fileItem === 'object' && fileItem !== null
2054
+ ? (fileItem.value || fileItem._id)
2055
+ : fileItem;
2056
+ }));
2057
+ if (!(uploadedFileIds.length > 0)) return [3, 18];
2058
+ return [4, (0, pls_1.createApplicationPLSFiles)(ctx, uploadedFileIds, approvalNew)];
1942
2059
  case 15:
2060
+ uploaded = _b.sent();
2061
+ plsIds = _.uniq(_.compact(plsIdsBefore.concat(uploaded.records.map(function (item) { return item.id; }))));
2062
+ return [4, ctx.getObject('pepsico_material_approval').directUpdate(approvalNew._id, {
2063
+ pls_km_files: plsIds,
2064
+ pls_upload_files: [],
2065
+ modified: new Date(),
2066
+ modified_by: user.userId
2067
+ })];
2068
+ case 16:
2069
+ _b.sent();
2070
+ return [4, ctx.getObject('pepsico_material_approval').findOne(recordId)];
2071
+ case 17:
2072
+ approvalNew = _b.sent();
2073
+ _b.label = 18;
2074
+ case 18:
2075
+ if (requiresPLS(approvalNew) && _.isEmpty(approvalNew.pls_km_files)) {
2076
+ throw new Error('请关联PLS知识库或上传本地PLS文件');
2077
+ }
2078
+ plsIdsAfter = _.uniq(_.compact(approvalNew.pls_km_files || []));
2079
+ hasExisting = plsIdsBefore.length > 0;
2080
+ hasUploaded = uploadedFileIds.length > 0;
2081
+ return [4, (0, pls_1.logPLSChange)(ctx, {
2082
+ approval: approvalNew,
2083
+ scene: scene,
2084
+ beforeIds: plsIdsBefore,
2085
+ afterIds: plsIdsAfter,
2086
+ source: hasExisting && hasUploaded ? 'mixed' : (hasUploaded ? 'upload' : 'existing')
2087
+ })];
2088
+ case 19:
2089
+ _b.sent();
2090
+ _b.label = 20;
2091
+ case 20:
2092
+ if (!(approvalNew.current_step === consts_1.Step.draft)) return [3, 28];
2093
+ return [4, getApproveType(ctx, approvalNew)];
2094
+ case 21:
1943
2095
  approvalType = _b.sent();
2096
+ if (approvalType === consts_1.Step.departmental_review && (0, exports.needsQcReview)(approvalNew) && _.isEmpty(approvalNew.qc_reviewer)) {
2097
+ throw new Error('QC审核人缺失, 请确认审批单对应审核人员信息');
2098
+ }
1944
2099
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(approvalNew._id, {
1945
2100
  approval_type: approvalType
1946
2101
  })];
1947
- case 16:
2102
+ case 22:
1948
2103
  _b.sent();
1949
- if (!false) return [3, 19];
2104
+ if (!false) return [3, 25];
1950
2105
  return [4, (0, material_1.deleteBulkDocOneDriveShareLink)(ctx, recordId)];
1951
- case 17:
2106
+ case 23:
1952
2107
  allTrue1 = _b.sent();
1953
2108
  if (allTrue1 != true) {
1954
2109
  return [2, {
@@ -1958,7 +2113,7 @@ var submitContent = function (ctx, recordId, currentStepApprovalStatus, skip) {
1958
2113
  }];
1959
2114
  }
1960
2115
  return [4, (0, material_1.downloadBulkFromOneDriveDoc)(ctx, recordId)];
1961
- case 18:
2116
+ case 24:
1962
2117
  allTrue = _b.sent();
1963
2118
  if (allTrue != true) {
1964
2119
  return [2, {
@@ -1967,29 +2122,29 @@ var submitContent = function (ctx, recordId, currentStepApprovalStatus, skip) {
1967
2122
  data: {}
1968
2123
  }];
1969
2124
  }
1970
- _b.label = 19;
1971
- case 19:
1972
- if (!(approvalNew && approvalNew.material_owner)) return [3, 22];
2125
+ _b.label = 25;
2126
+ case 25:
2127
+ if (!(approvalNew && approvalNew.material_owner)) return [3, 28];
1973
2128
  return [4, ctx.getObject('space_users').find({
1974
2129
  filters: [['email', '=', approvalNew.material_owner], ['space', '=', approvalNew.space]]
1975
2130
  })];
1976
- case 20:
2131
+ case 26:
1977
2132
  spaceUsers = _b.sent();
1978
- if (!(spaceUsers && spaceUsers.length > 0)) return [3, 22];
2133
+ if (!(spaceUsers && spaceUsers.length > 0)) return [3, 28];
1979
2134
  owner = spaceUsers[0];
1980
2135
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(recordId, {
1981
2136
  material_owner_id: owner.user
1982
2137
  })];
1983
- case 21:
2138
+ case 27:
1984
2139
  _b.sent();
1985
- _b.label = 22;
1986
- case 22:
2140
+ _b.label = 28;
2141
+ case 28:
1987
2142
  console.log("[submitContent] \u6B65\u9AA4\u63D0\u4EA4\uFF0C\u53C2\u6570\u4E3A \u5BA1\u6279\u5355: ".concat(recordId, " \u5F53\u524D\u6B65\u9AA4: ").concat(approvalNew.current_step, " \u5BA1\u6279\u7ED3\u679C\u4E3A: ").concat(currentStepApprovalStatus));
1988
- if (!(approvalNew.current_step === consts_1.Step.ai_review && currentStepApprovalStatus === consts_1.ApprovalStatus.approved)) return [3, 32];
2143
+ if (!(approvalNew.current_step === consts_1.Step.ai_review && currentStepApprovalStatus === consts_1.ApprovalStatus.approved)) return [3, 38];
1989
2144
  return [4, (0, material_1.getOneDriveMaterials)(ctx, recordId)];
1990
- case 23:
2145
+ case 29:
1991
2146
  materials = _b.sent();
1992
- if (!(approvalNew.materials_xml_to_word_status != 'completed')) return [3, 26];
2147
+ if (!(approvalNew.materials_xml_to_word_status != 'completed')) return [3, 32];
1993
2148
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(approvalNew._id, {
1994
2149
  materials_download_from_onedrive_failed_count: 0,
1995
2150
  materials_download_from_onedrive_status: 'not_started',
@@ -1998,56 +2153,56 @@ var submitContent = function (ctx, recordId, currentStepApprovalStatus, skip) {
1998
2153
  materials_uploaded_to_onedrive_failed_count: 0,
1999
2154
  materials_uploaded_to_onedrive_status: 'not_started'
2000
2155
  })];
2001
- case 24:
2156
+ case 30:
2002
2157
  _b.sent();
2003
2158
  return [4, ctx.getObject('pepsico_material_approval').findOne(recordId)];
2004
- case 25:
2159
+ case 31:
2005
2160
  approvalNew = _b.sent();
2006
- _b.label = 26;
2007
- case 26:
2008
- if (!(approvalNew.materials_uploaded_to_onedrive_status != 'completed')) return [3, 32];
2161
+ _b.label = 32;
2162
+ case 32:
2163
+ if (!(approvalNew.materials_uploaded_to_onedrive_status != 'completed')) return [3, 38];
2009
2164
  console.log('materials:', materials.length);
2010
- if (!(materials.length === 0)) return [3, 28];
2165
+ if (!(materials.length === 0)) return [3, 34];
2011
2166
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(approvalNew._id, {
2012
2167
  materials_uploaded_to_onedrive_status: 'no_materials',
2013
2168
  materials_xml_to_word_status: 'no_materials'
2014
2169
  })];
2015
- case 27:
2170
+ case 33:
2016
2171
  _b.sent();
2017
- return [3, 32];
2018
- case 28:
2172
+ return [3, 38];
2173
+ case 34:
2019
2174
  pendingXmlToWordMaterials = materials.filter(function (material) {
2020
2175
  return material.xml_converted_word !== true;
2021
2176
  });
2022
2177
  console.log('pendingXmlToWordMaterials:', pendingXmlToWordMaterials.length);
2023
- if (!(pendingXmlToWordMaterials.length > 0 && approvalNew.materials_xml_to_word_status != 'no_materials')) return [3, 30];
2178
+ if (!(pendingXmlToWordMaterials.length > 0 && approvalNew.materials_xml_to_word_status != 'no_materials')) return [3, 36];
2024
2179
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(approvalNew._id, {
2025
2180
  materials_xml_to_word_status: 'pending'
2026
2181
  })];
2027
- case 29:
2182
+ case 35:
2028
2183
  _b.sent();
2029
2184
  return [2];
2030
- case 30:
2185
+ case 36:
2031
2186
  pendingUploadMaterials = materials.filter(function (material) {
2032
2187
  return material.uploaded_to_onedrive !== true;
2033
2188
  });
2034
2189
  console.log('pendingUploadMaterials:', pendingUploadMaterials.length);
2035
- if (!(pendingUploadMaterials.length > 0)) return [3, 32];
2190
+ if (!(pendingUploadMaterials.length > 0)) return [3, 38];
2036
2191
  return [4, ctx.getObject('pepsico_material_approval').directUpdate(approvalNew._id, {
2037
2192
  materials_uploaded_to_onedrive_status: 'pending'
2038
2193
  })];
2039
- case 31:
2194
+ case 37:
2040
2195
  _b.sent();
2041
2196
  return [2];
2042
- case 32:
2197
+ case 38:
2043
2198
  console.time('updateUserStepStatus: ' + recordId);
2044
2199
  return [4, updateUserStepStatus(ctx, approvalNew, { approvalStatus: currentStepApprovalStatus, approveField: '' })];
2045
- case 33:
2200
+ case 39:
2046
2201
  _b.sent();
2047
2202
  console.timeEnd('updateUserStepStatus: ' + recordId);
2048
2203
  console.time('advanceApproval: ' + recordId);
2049
2204
  return [4, (0, exports.advanceApproval)(ctx, recordId, currentStepApprovalStatus)];
2050
- case 34:
2205
+ case 40:
2051
2206
  _b.sent();
2052
2207
  console.timeEnd('advanceApproval: ' + recordId);
2053
2208
  return [2];
@@ -2068,12 +2223,14 @@ var TYPE_TO_REVIEWER_FIELD = (_a = {},
2068
2223
  _a[consts_1.ProcessApprovalType.Legal] = 'legal_reviewer',
2069
2224
  _a[consts_1.ProcessApprovalType.SRA] = 'sra_reviewer',
2070
2225
  _a[consts_1.ProcessApprovalType.CA] = 'ca_reviewer',
2226
+ _a[consts_1.ProcessApprovalType.QC] = 'qc_reviewer',
2071
2227
  _a[consts_1.ProcessApprovalType.guding] = 'reviewer',
2072
2228
  _a[consts_1.ProcessApprovalType.Kids] = 'kids_reviewer',
2073
2229
  _a[consts_1.ProcessApprovalType.PreNS] = 'pre_ns_reviewer',
2074
2230
  _a[consts_1.ProcessApprovalType.PreLegal] = 'pre_legal_reviewer',
2075
2231
  _a[consts_1.ProcessApprovalType.PreSRA] = 'pre_sra_reviewer',
2076
2232
  _a[consts_1.ProcessApprovalType.PreCA] = 'pre_ca_reviewer',
2233
+ _a[consts_1.ProcessApprovalType.PreQC] = 'pre_qc_reviewer',
2077
2234
  _a[consts_1.ProcessApprovalType.Preguding] = 'pre_reviewer',
2078
2235
  _a);
2079
2236
  var TYPE_TO_HANDLER_FIELD = (_b = {},
@@ -2081,12 +2238,14 @@ var TYPE_TO_HANDLER_FIELD = (_b = {},
2081
2238
  _b[consts_1.ProcessApprovalType.Legal] = 'handler_legal',
2082
2239
  _b[consts_1.ProcessApprovalType.SRA] = 'handler_sra',
2083
2240
  _b[consts_1.ProcessApprovalType.CA] = 'handler_ca',
2241
+ _b[consts_1.ProcessApprovalType.QC] = 'handler_qc',
2084
2242
  _b[consts_1.ProcessApprovalType.guding] = 'handler_guding',
2085
2243
  _b[consts_1.ProcessApprovalType.Kids] = 'handler_kids',
2086
2244
  _b[consts_1.ProcessApprovalType.PreNS] = 'handler_prens',
2087
2245
  _b[consts_1.ProcessApprovalType.PreLegal] = 'handler_prelegal',
2088
2246
  _b[consts_1.ProcessApprovalType.PreSRA] = 'handler_presra',
2089
2247
  _b[consts_1.ProcessApprovalType.PreCA] = 'handler_preca',
2248
+ _b[consts_1.ProcessApprovalType.PreQC] = 'handler_preqc',
2090
2249
  _b[consts_1.ProcessApprovalType.Preguding] = 'handler_preguding',
2091
2250
  _b);
2092
2251
  var TYPE_TO_STATUS_FIELD = (_c = {},
@@ -2094,21 +2253,25 @@ var TYPE_TO_STATUS_FIELD = (_c = {},
2094
2253
  _c[consts_1.ProcessApprovalType.Legal] = 'legal_approval_status',
2095
2254
  _c[consts_1.ProcessApprovalType.SRA] = 'sra_approval_status',
2096
2255
  _c[consts_1.ProcessApprovalType.CA] = 'ca_approval_status',
2256
+ _c[consts_1.ProcessApprovalType.QC] = 'qc_approval_status',
2097
2257
  _c[consts_1.ProcessApprovalType.guding] = 'approval_status',
2098
2258
  _c[consts_1.ProcessApprovalType.Kids] = 'kids_approval_status',
2099
2259
  _c[consts_1.ProcessApprovalType.PreNS] = 'pre_ns_approval_status',
2100
2260
  _c[consts_1.ProcessApprovalType.PreLegal] = 'pre_legal_approval_status',
2101
2261
  _c[consts_1.ProcessApprovalType.PreSRA] = 'pre_sra_approval_status',
2102
2262
  _c[consts_1.ProcessApprovalType.PreCA] = 'pre_ca_approval_status',
2263
+ _c[consts_1.ProcessApprovalType.PreQC] = 'pre_qc_approval_status',
2103
2264
  _c[consts_1.ProcessApprovalType.Preguding] = 'pre_approval_status',
2104
2265
  _c);
2105
2266
  var POSTPONE_REVIEW_TYPE_PRIORITY = [
2106
2267
  consts_1.ProcessApprovalType.CA,
2268
+ consts_1.ProcessApprovalType.QC,
2107
2269
  consts_1.ProcessApprovalType.SRA,
2108
2270
  consts_1.ProcessApprovalType.NS,
2109
2271
  consts_1.ProcessApprovalType.Legal,
2110
2272
  consts_1.ProcessApprovalType.guding,
2111
2273
  consts_1.ProcessApprovalType.PreCA,
2274
+ consts_1.ProcessApprovalType.PreQC,
2112
2275
  consts_1.ProcessApprovalType.PreSRA,
2113
2276
  consts_1.ProcessApprovalType.PreNS,
2114
2277
  consts_1.ProcessApprovalType.PreLegal,
@@ -2155,12 +2318,16 @@ var getPostponeReviewDepartmentType = function (record, userProcessRecords, user
2155
2318
  exports.getPostponeReviewDepartmentType = getPostponeReviewDepartmentType;
2156
2319
  var postponeReview = function (ctx, recordId, data) {
2157
2320
  return tslib_1.__awaiter(this, void 0, void 0, function () {
2158
- var user, record, reviewSteps, progessRecords, userProcessRecords, departmentType, statusField, reviewerField, handlerField, deptUserIds, now, unactivatedMarkers, latestMarker, _a, _b, marker, e_13_1, currentMarkerUsers, newMarkerUsers;
2321
+ var user, postponeReason, record, reviewSteps, progessRecords, userProcessRecords, departmentType, statusField, reviewerField, handlerField, deptUserIds, now, unactivatedMarkers, latestMarker, _a, _b, marker, e_13_1, currentMarkerUsers, newMarkerUsers;
2159
2322
  var e_13, _c;
2160
2323
  return tslib_1.__generator(this, function (_d) {
2161
2324
  switch (_d.label) {
2162
2325
  case 0:
2163
2326
  user = ctx.meta.user;
2327
+ postponeReason = _.trim(data && data.postpone_reason || '');
2328
+ if (!postponeReason) {
2329
+ throw new Error('请填写延后原因');
2330
+ }
2164
2331
  return [4, ctx.getObject('pepsico_material_approval').findOne(recordId)];
2165
2332
  case 1:
2166
2333
  record = _d.sent();
@@ -2236,7 +2403,7 @@ var postponeReview = function (ctx, recordId, data) {
2236
2403
  latestMarker = unactivatedMarkers[0];
2237
2404
  return [4, ctx.getObject('pepsico_review_postpone').directUpdate(latestMarker._id, {
2238
2405
  department_type: departmentType,
2239
- postpone_reason: data.postpone_reason || '',
2406
+ postpone_reason: postponeReason,
2240
2407
  postpone_date: now,
2241
2408
  postponed_user_ids: deptUserIds.join(','),
2242
2409
  notification_sent: false,
@@ -2282,7 +2449,7 @@ var postponeReview = function (ctx, recordId, data) {
2282
2449
  pepsico_material_approval: recordId,
2283
2450
  department_type: departmentType,
2284
2451
  postpone_by: user.userId,
2285
- postpone_reason: data.postpone_reason || '',
2452
+ postpone_reason: postponeReason,
2286
2453
  postpone_date: now,
2287
2454
  is_marker: true,
2288
2455
  notification_sent: false,