av6-core 1.8.4 → 1.8.6
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.
- package/dist/index.d.mts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.js +62 -64
- package/dist/index.mjs +62 -64
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -522,19 +522,19 @@ interface CommonServiceResponse {
|
|
|
522
522
|
declare const commonService: (serviceDeps: Deps) => CommonServiceResponse;
|
|
523
523
|
|
|
524
524
|
declare enum ApprovalStatus {
|
|
525
|
-
PENDING =
|
|
526
|
-
PARTIALLY_APPROVED =
|
|
527
|
-
APPROVED =
|
|
528
|
-
REJECTED =
|
|
529
|
-
CANCELLED =
|
|
525
|
+
PENDING = "PENDING",
|
|
526
|
+
PARTIALLY_APPROVED = "PARTIALLY_APPROVED",
|
|
527
|
+
APPROVED = "APPROVED",
|
|
528
|
+
REJECTED = "REJECTED",
|
|
529
|
+
CANCELLED = "CANCELLED"
|
|
530
530
|
}
|
|
531
531
|
declare enum FlowType {
|
|
532
|
-
STATUS =
|
|
533
|
-
CO_PAY =
|
|
534
|
-
INDIVIDUAL_DISCOUNT =
|
|
535
|
-
OVERALL_DISCOUNT =
|
|
536
|
-
SPECIAL_DISCOUNT =
|
|
537
|
-
REFUND =
|
|
532
|
+
STATUS = "STATUS",
|
|
533
|
+
CO_PAY = "CO_PAY",
|
|
534
|
+
INDIVIDUAL_DISCOUNT = "INDIVIDUAL_DISCOUNT",
|
|
535
|
+
OVERALL_DISCOUNT = "OVERALL_DISCOUNT",
|
|
536
|
+
SPECIAL_DISCOUNT = "SPECIAL_DISCOUNT",
|
|
537
|
+
REFUND = "REFUND"
|
|
538
538
|
}
|
|
539
539
|
type StepType = "MIN_MAX" | "NORMAL";
|
|
540
540
|
declare enum ActionMode {
|
package/dist/index.d.ts
CHANGED
|
@@ -522,19 +522,19 @@ interface CommonServiceResponse {
|
|
|
522
522
|
declare const commonService: (serviceDeps: Deps) => CommonServiceResponse;
|
|
523
523
|
|
|
524
524
|
declare enum ApprovalStatus {
|
|
525
|
-
PENDING =
|
|
526
|
-
PARTIALLY_APPROVED =
|
|
527
|
-
APPROVED =
|
|
528
|
-
REJECTED =
|
|
529
|
-
CANCELLED =
|
|
525
|
+
PENDING = "PENDING",
|
|
526
|
+
PARTIALLY_APPROVED = "PARTIALLY_APPROVED",
|
|
527
|
+
APPROVED = "APPROVED",
|
|
528
|
+
REJECTED = "REJECTED",
|
|
529
|
+
CANCELLED = "CANCELLED"
|
|
530
530
|
}
|
|
531
531
|
declare enum FlowType {
|
|
532
|
-
STATUS =
|
|
533
|
-
CO_PAY =
|
|
534
|
-
INDIVIDUAL_DISCOUNT =
|
|
535
|
-
OVERALL_DISCOUNT =
|
|
536
|
-
SPECIAL_DISCOUNT =
|
|
537
|
-
REFUND =
|
|
532
|
+
STATUS = "STATUS",
|
|
533
|
+
CO_PAY = "CO_PAY",
|
|
534
|
+
INDIVIDUAL_DISCOUNT = "INDIVIDUAL_DISCOUNT",
|
|
535
|
+
OVERALL_DISCOUNT = "OVERALL_DISCOUNT",
|
|
536
|
+
SPECIAL_DISCOUNT = "SPECIAL_DISCOUNT",
|
|
537
|
+
REFUND = "REFUND"
|
|
538
538
|
}
|
|
539
539
|
type StepType = "MIN_MAX" | "NORMAL";
|
|
540
540
|
declare enum ActionMode {
|
package/dist/index.js
CHANGED
|
@@ -2307,20 +2307,20 @@ var commonService = (serviceDeps) => {
|
|
|
2307
2307
|
|
|
2308
2308
|
// src/types/approval.type.ts
|
|
2309
2309
|
var ApprovalStatus = /* @__PURE__ */ ((ApprovalStatus2) => {
|
|
2310
|
-
ApprovalStatus2[
|
|
2311
|
-
ApprovalStatus2[
|
|
2312
|
-
ApprovalStatus2[
|
|
2313
|
-
ApprovalStatus2[
|
|
2314
|
-
ApprovalStatus2[
|
|
2310
|
+
ApprovalStatus2["PENDING"] = "PENDING";
|
|
2311
|
+
ApprovalStatus2["PARTIALLY_APPROVED"] = "PARTIALLY_APPROVED";
|
|
2312
|
+
ApprovalStatus2["APPROVED"] = "APPROVED";
|
|
2313
|
+
ApprovalStatus2["REJECTED"] = "REJECTED";
|
|
2314
|
+
ApprovalStatus2["CANCELLED"] = "CANCELLED";
|
|
2315
2315
|
return ApprovalStatus2;
|
|
2316
2316
|
})(ApprovalStatus || {});
|
|
2317
2317
|
var FlowType = /* @__PURE__ */ ((FlowType3) => {
|
|
2318
|
-
FlowType3[
|
|
2319
|
-
FlowType3[
|
|
2320
|
-
FlowType3[
|
|
2321
|
-
FlowType3[
|
|
2322
|
-
FlowType3[
|
|
2323
|
-
FlowType3[
|
|
2318
|
+
FlowType3["STATUS"] = "STATUS";
|
|
2319
|
+
FlowType3["CO_PAY"] = "CO_PAY";
|
|
2320
|
+
FlowType3["INDIVIDUAL_DISCOUNT"] = "INDIVIDUAL_DISCOUNT";
|
|
2321
|
+
FlowType3["OVERALL_DISCOUNT"] = "OVERALL_DISCOUNT";
|
|
2322
|
+
FlowType3["SPECIAL_DISCOUNT"] = "SPECIAL_DISCOUNT";
|
|
2323
|
+
FlowType3["REFUND"] = "REFUND";
|
|
2324
2324
|
return FlowType3;
|
|
2325
2325
|
})(FlowType || {});
|
|
2326
2326
|
var ActionMode = /* @__PURE__ */ ((ActionMode2) => {
|
|
@@ -2372,7 +2372,7 @@ var approvalRepository = (helpers) => {
|
|
|
2372
2372
|
startDate,
|
|
2373
2373
|
endDate,
|
|
2374
2374
|
searchText = "",
|
|
2375
|
-
status = [
|
|
2375
|
+
status = ["PENDING" /* PENDING */, "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */],
|
|
2376
2376
|
flowType
|
|
2377
2377
|
}) {
|
|
2378
2378
|
const offset = (pageNo - 1) * pageSize;
|
|
@@ -2541,7 +2541,7 @@ var ApprovalService = class {
|
|
|
2541
2541
|
return s.stepType === "NORMAL" || s.stepType === "MIN_MAX" && Number(inst.netTotal) >= Number(s.minAmount) && Number(inst.netTotal) <= Number(s.maxAmount);
|
|
2542
2542
|
});
|
|
2543
2543
|
const lastLevel = await this.lastLevel(inst.flow.steps);
|
|
2544
|
-
const newStatus = action === "REJECT" ?
|
|
2544
|
+
const newStatus = action === "REJECT" ? "REJECTED" /* REJECTED */ : step.level === lastLevel ? "APPROVED" /* APPROVED */ : "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */;
|
|
2545
2545
|
await tx.approvalAction.create({
|
|
2546
2546
|
data: {
|
|
2547
2547
|
instanceId,
|
|
@@ -2552,7 +2552,7 @@ var ApprovalService = class {
|
|
|
2552
2552
|
}
|
|
2553
2553
|
});
|
|
2554
2554
|
let newFlow = null;
|
|
2555
|
-
if (newStatus ===
|
|
2555
|
+
if (newStatus === "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */) {
|
|
2556
2556
|
newFlow = await this.approvalRepo.findMatchingFlow(
|
|
2557
2557
|
tx,
|
|
2558
2558
|
inst.flow.subjectType,
|
|
@@ -2568,7 +2568,7 @@ var ApprovalService = class {
|
|
|
2568
2568
|
const updated = await tx.approvalInstance.update({
|
|
2569
2569
|
where: { id: instanceId },
|
|
2570
2570
|
data: {
|
|
2571
|
-
currentStep: newStatus ===
|
|
2571
|
+
currentStep: newStatus === "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */ ? newFlow?.stepId : step.id,
|
|
2572
2572
|
status: newStatus
|
|
2573
2573
|
}
|
|
2574
2574
|
});
|
|
@@ -2589,7 +2589,7 @@ var ApprovalService = class {
|
|
|
2589
2589
|
action,
|
|
2590
2590
|
comment
|
|
2591
2591
|
});
|
|
2592
|
-
if (newStatus ===
|
|
2592
|
+
if (newStatus === "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */) {
|
|
2593
2593
|
const nextLevel = step.level + 1;
|
|
2594
2594
|
const approvers = await tx.approverMapping.findMany({
|
|
2595
2595
|
where: { stepId: updated.currentStep, ccId, isActive: true }
|
|
@@ -2685,7 +2685,7 @@ var ApprovalService = class {
|
|
|
2685
2685
|
});
|
|
2686
2686
|
} else {
|
|
2687
2687
|
switch (instance.status) {
|
|
2688
|
-
case
|
|
2688
|
+
case "APPROVED" /* APPROVED */:
|
|
2689
2689
|
if (approvalFlow.approveActionUrl) {
|
|
2690
2690
|
const res = await fetch(approvalFlow.approveActionUrl, {
|
|
2691
2691
|
method: "POST",
|
|
@@ -2703,7 +2703,7 @@ var ApprovalService = class {
|
|
|
2703
2703
|
}
|
|
2704
2704
|
}
|
|
2705
2705
|
break;
|
|
2706
|
-
case
|
|
2706
|
+
case "REJECTED" /* REJECTED */:
|
|
2707
2707
|
if (approvalFlow.rejectActionUrl) {
|
|
2708
2708
|
const res = await fetch(approvalFlow.rejectActionUrl, {
|
|
2709
2709
|
method: "POST",
|
|
@@ -2716,7 +2716,7 @@ var ApprovalService = class {
|
|
|
2716
2716
|
}
|
|
2717
2717
|
}
|
|
2718
2718
|
break;
|
|
2719
|
-
case
|
|
2719
|
+
case "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */:
|
|
2720
2720
|
if (approvalFlow.partiallyApproveActionUrl) {
|
|
2721
2721
|
const res = await fetch(approvalFlow.partiallyApproveActionUrl, {
|
|
2722
2722
|
method: "POST",
|
|
@@ -2739,59 +2739,57 @@ var ApprovalService = class {
|
|
|
2739
2739
|
}
|
|
2740
2740
|
}
|
|
2741
2741
|
async assertPermission(step, approverId, instanceId, ccId, tx) {
|
|
2742
|
-
const result = await tx.$queryRaw
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
|
|
2750
|
-
|
|
2742
|
+
const result = await tx.$queryRaw`
|
|
2743
|
+
SELECT COUNT(*) AS count
|
|
2744
|
+
FROM (
|
|
2745
|
+
SELECT am.staff_id AS staff_id
|
|
2746
|
+
FROM core_approver_mapping am
|
|
2747
|
+
WHERE am.step_id = ${step.id}
|
|
2748
|
+
AND am.is_active = TRUE
|
|
2749
|
+
AND am.cc_id = ${ccId}
|
|
2750
|
+
AND am.staff_id = ${approverId}
|
|
2751
2751
|
|
|
2752
|
-
|
|
2752
|
+
UNION
|
|
2753
2753
|
|
|
2754
|
-
|
|
2755
|
-
|
|
2756
|
-
|
|
2757
|
-
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
2754
|
+
SELECT scc.staff_id AS staff_id
|
|
2755
|
+
FROM core_approver_mapping am
|
|
2756
|
+
LEFT JOIN staff_roles sr
|
|
2757
|
+
ON sr.role_id = am.role_id
|
|
2758
|
+
LEFT JOIN staff_collection_center scc
|
|
2759
|
+
ON scc.collection_center_id = am.cc_id
|
|
2760
|
+
AND scc.staff_id = sr.staff_id
|
|
2761
|
+
WHERE am.step_id = ${step.id}
|
|
2762
|
+
AND am.is_active = TRUE
|
|
2763
|
+
AND am.cc_id = ${ccId}
|
|
2764
|
+
AND scc.staff_id = ${approverId}
|
|
2765
|
+
) AS staff_union;
|
|
2766
|
+
`;
|
|
2767
2767
|
if (Number(result[0].count) === 0) {
|
|
2768
2768
|
throw new this.deps.helpers.ErrorHandler(403, "You are not allowed to act on this approval step");
|
|
2769
2769
|
}
|
|
2770
|
-
const
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
|
|
2776
|
-
|
|
2777
|
-
|
|
2778
|
-
|
|
2779
|
-
|
|
2780
|
-
const actionsResult = await tx.$queryRawUnsafe(existingActsQuery, instanceId, step.level, approverId);
|
|
2770
|
+
const actionsResult = await tx.$queryRaw`
|
|
2771
|
+
SELECT COUNT(*) AS count
|
|
2772
|
+
FROM core_approval_action a
|
|
2773
|
+
JOIN core_approval_instance ai ON ai.id = a.instance_id
|
|
2774
|
+
WHERE ai.id = ${instanceId}
|
|
2775
|
+
AND a.level = ${step.level}
|
|
2776
|
+
AND a.acted_by = ${approverId}
|
|
2777
|
+
AND a.is_active = true
|
|
2778
|
+
AND ai.is_active = true
|
|
2779
|
+
`;
|
|
2781
2780
|
if (Number(actionsResult[0].count) > 0) {
|
|
2782
2781
|
throw new this.deps.helpers.ErrorHandler(409, "You have already submitted a decision for this level");
|
|
2783
2782
|
}
|
|
2784
|
-
const
|
|
2785
|
-
|
|
2786
|
-
|
|
2787
|
-
|
|
2788
|
-
|
|
2789
|
-
|
|
2790
|
-
|
|
2791
|
-
|
|
2792
|
-
|
|
2793
|
-
|
|
2794
|
-
const prevActionsResult = await tx.$queryRawUnsafe(prevApproversQuery, instanceId, step.level);
|
|
2783
|
+
const prevActionsResult = await tx.$queryRaw`
|
|
2784
|
+
SELECT COUNT(*) AS count
|
|
2785
|
+
FROM core_approval_action a
|
|
2786
|
+
JOIN core_approval_instance ai ON ai.id = a.instance_id
|
|
2787
|
+
WHERE ai.id = ${instanceId}
|
|
2788
|
+
AND a.level < ${step.level}
|
|
2789
|
+
AND a.is_active = true
|
|
2790
|
+
AND ai.is_active = true
|
|
2791
|
+
AND a.acted_by IS NOT NULL
|
|
2792
|
+
`;
|
|
2795
2793
|
if (Number(prevActionsResult[0].count) !== step.level - 1) {
|
|
2796
2794
|
throw new this.deps.helpers.ErrorHandler(403, "You must wait for previous approvers to act first");
|
|
2797
2795
|
}
|
package/dist/index.mjs
CHANGED
|
@@ -2246,20 +2246,20 @@ var commonService = (serviceDeps) => {
|
|
|
2246
2246
|
|
|
2247
2247
|
// src/types/approval.type.ts
|
|
2248
2248
|
var ApprovalStatus = /* @__PURE__ */ ((ApprovalStatus2) => {
|
|
2249
|
-
ApprovalStatus2[
|
|
2250
|
-
ApprovalStatus2[
|
|
2251
|
-
ApprovalStatus2[
|
|
2252
|
-
ApprovalStatus2[
|
|
2253
|
-
ApprovalStatus2[
|
|
2249
|
+
ApprovalStatus2["PENDING"] = "PENDING";
|
|
2250
|
+
ApprovalStatus2["PARTIALLY_APPROVED"] = "PARTIALLY_APPROVED";
|
|
2251
|
+
ApprovalStatus2["APPROVED"] = "APPROVED";
|
|
2252
|
+
ApprovalStatus2["REJECTED"] = "REJECTED";
|
|
2253
|
+
ApprovalStatus2["CANCELLED"] = "CANCELLED";
|
|
2254
2254
|
return ApprovalStatus2;
|
|
2255
2255
|
})(ApprovalStatus || {});
|
|
2256
2256
|
var FlowType = /* @__PURE__ */ ((FlowType3) => {
|
|
2257
|
-
FlowType3[
|
|
2258
|
-
FlowType3[
|
|
2259
|
-
FlowType3[
|
|
2260
|
-
FlowType3[
|
|
2261
|
-
FlowType3[
|
|
2262
|
-
FlowType3[
|
|
2257
|
+
FlowType3["STATUS"] = "STATUS";
|
|
2258
|
+
FlowType3["CO_PAY"] = "CO_PAY";
|
|
2259
|
+
FlowType3["INDIVIDUAL_DISCOUNT"] = "INDIVIDUAL_DISCOUNT";
|
|
2260
|
+
FlowType3["OVERALL_DISCOUNT"] = "OVERALL_DISCOUNT";
|
|
2261
|
+
FlowType3["SPECIAL_DISCOUNT"] = "SPECIAL_DISCOUNT";
|
|
2262
|
+
FlowType3["REFUND"] = "REFUND";
|
|
2263
2263
|
return FlowType3;
|
|
2264
2264
|
})(FlowType || {});
|
|
2265
2265
|
var ActionMode = /* @__PURE__ */ ((ActionMode2) => {
|
|
@@ -2311,7 +2311,7 @@ var approvalRepository = (helpers) => {
|
|
|
2311
2311
|
startDate,
|
|
2312
2312
|
endDate,
|
|
2313
2313
|
searchText = "",
|
|
2314
|
-
status = [
|
|
2314
|
+
status = ["PENDING" /* PENDING */, "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */],
|
|
2315
2315
|
flowType
|
|
2316
2316
|
}) {
|
|
2317
2317
|
const offset = (pageNo - 1) * pageSize;
|
|
@@ -2480,7 +2480,7 @@ var ApprovalService = class {
|
|
|
2480
2480
|
return s.stepType === "NORMAL" || s.stepType === "MIN_MAX" && Number(inst.netTotal) >= Number(s.minAmount) && Number(inst.netTotal) <= Number(s.maxAmount);
|
|
2481
2481
|
});
|
|
2482
2482
|
const lastLevel = await this.lastLevel(inst.flow.steps);
|
|
2483
|
-
const newStatus = action === "REJECT" ?
|
|
2483
|
+
const newStatus = action === "REJECT" ? "REJECTED" /* REJECTED */ : step.level === lastLevel ? "APPROVED" /* APPROVED */ : "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */;
|
|
2484
2484
|
await tx.approvalAction.create({
|
|
2485
2485
|
data: {
|
|
2486
2486
|
instanceId,
|
|
@@ -2491,7 +2491,7 @@ var ApprovalService = class {
|
|
|
2491
2491
|
}
|
|
2492
2492
|
});
|
|
2493
2493
|
let newFlow = null;
|
|
2494
|
-
if (newStatus ===
|
|
2494
|
+
if (newStatus === "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */) {
|
|
2495
2495
|
newFlow = await this.approvalRepo.findMatchingFlow(
|
|
2496
2496
|
tx,
|
|
2497
2497
|
inst.flow.subjectType,
|
|
@@ -2507,7 +2507,7 @@ var ApprovalService = class {
|
|
|
2507
2507
|
const updated = await tx.approvalInstance.update({
|
|
2508
2508
|
where: { id: instanceId },
|
|
2509
2509
|
data: {
|
|
2510
|
-
currentStep: newStatus ===
|
|
2510
|
+
currentStep: newStatus === "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */ ? newFlow?.stepId : step.id,
|
|
2511
2511
|
status: newStatus
|
|
2512
2512
|
}
|
|
2513
2513
|
});
|
|
@@ -2528,7 +2528,7 @@ var ApprovalService = class {
|
|
|
2528
2528
|
action,
|
|
2529
2529
|
comment
|
|
2530
2530
|
});
|
|
2531
|
-
if (newStatus ===
|
|
2531
|
+
if (newStatus === "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */) {
|
|
2532
2532
|
const nextLevel = step.level + 1;
|
|
2533
2533
|
const approvers = await tx.approverMapping.findMany({
|
|
2534
2534
|
where: { stepId: updated.currentStep, ccId, isActive: true }
|
|
@@ -2624,7 +2624,7 @@ var ApprovalService = class {
|
|
|
2624
2624
|
});
|
|
2625
2625
|
} else {
|
|
2626
2626
|
switch (instance.status) {
|
|
2627
|
-
case
|
|
2627
|
+
case "APPROVED" /* APPROVED */:
|
|
2628
2628
|
if (approvalFlow.approveActionUrl) {
|
|
2629
2629
|
const res = await fetch(approvalFlow.approveActionUrl, {
|
|
2630
2630
|
method: "POST",
|
|
@@ -2642,7 +2642,7 @@ var ApprovalService = class {
|
|
|
2642
2642
|
}
|
|
2643
2643
|
}
|
|
2644
2644
|
break;
|
|
2645
|
-
case
|
|
2645
|
+
case "REJECTED" /* REJECTED */:
|
|
2646
2646
|
if (approvalFlow.rejectActionUrl) {
|
|
2647
2647
|
const res = await fetch(approvalFlow.rejectActionUrl, {
|
|
2648
2648
|
method: "POST",
|
|
@@ -2655,7 +2655,7 @@ var ApprovalService = class {
|
|
|
2655
2655
|
}
|
|
2656
2656
|
}
|
|
2657
2657
|
break;
|
|
2658
|
-
case
|
|
2658
|
+
case "PARTIALLY_APPROVED" /* PARTIALLY_APPROVED */:
|
|
2659
2659
|
if (approvalFlow.partiallyApproveActionUrl) {
|
|
2660
2660
|
const res = await fetch(approvalFlow.partiallyApproveActionUrl, {
|
|
2661
2661
|
method: "POST",
|
|
@@ -2678,59 +2678,57 @@ var ApprovalService = class {
|
|
|
2678
2678
|
}
|
|
2679
2679
|
}
|
|
2680
2680
|
async assertPermission(step, approverId, instanceId, ccId, tx) {
|
|
2681
|
-
const result = await tx.$queryRaw
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2689
|
-
|
|
2681
|
+
const result = await tx.$queryRaw`
|
|
2682
|
+
SELECT COUNT(*) AS count
|
|
2683
|
+
FROM (
|
|
2684
|
+
SELECT am.staff_id AS staff_id
|
|
2685
|
+
FROM core_approver_mapping am
|
|
2686
|
+
WHERE am.step_id = ${step.id}
|
|
2687
|
+
AND am.is_active = TRUE
|
|
2688
|
+
AND am.cc_id = ${ccId}
|
|
2689
|
+
AND am.staff_id = ${approverId}
|
|
2690
2690
|
|
|
2691
|
-
|
|
2691
|
+
UNION
|
|
2692
2692
|
|
|
2693
|
-
|
|
2694
|
-
|
|
2695
|
-
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2703
|
-
|
|
2704
|
-
|
|
2705
|
-
|
|
2693
|
+
SELECT scc.staff_id AS staff_id
|
|
2694
|
+
FROM core_approver_mapping am
|
|
2695
|
+
LEFT JOIN staff_roles sr
|
|
2696
|
+
ON sr.role_id = am.role_id
|
|
2697
|
+
LEFT JOIN staff_collection_center scc
|
|
2698
|
+
ON scc.collection_center_id = am.cc_id
|
|
2699
|
+
AND scc.staff_id = sr.staff_id
|
|
2700
|
+
WHERE am.step_id = ${step.id}
|
|
2701
|
+
AND am.is_active = TRUE
|
|
2702
|
+
AND am.cc_id = ${ccId}
|
|
2703
|
+
AND scc.staff_id = ${approverId}
|
|
2704
|
+
) AS staff_union;
|
|
2705
|
+
`;
|
|
2706
2706
|
if (Number(result[0].count) === 0) {
|
|
2707
2707
|
throw new this.deps.helpers.ErrorHandler(403, "You are not allowed to act on this approval step");
|
|
2708
2708
|
}
|
|
2709
|
-
const
|
|
2710
|
-
|
|
2711
|
-
|
|
2712
|
-
|
|
2713
|
-
|
|
2714
|
-
|
|
2715
|
-
|
|
2716
|
-
|
|
2717
|
-
|
|
2718
|
-
|
|
2719
|
-
const actionsResult = await tx.$queryRawUnsafe(existingActsQuery, instanceId, step.level, approverId);
|
|
2709
|
+
const actionsResult = await tx.$queryRaw`
|
|
2710
|
+
SELECT COUNT(*) AS count
|
|
2711
|
+
FROM core_approval_action a
|
|
2712
|
+
JOIN core_approval_instance ai ON ai.id = a.instance_id
|
|
2713
|
+
WHERE ai.id = ${instanceId}
|
|
2714
|
+
AND a.level = ${step.level}
|
|
2715
|
+
AND a.acted_by = ${approverId}
|
|
2716
|
+
AND a.is_active = true
|
|
2717
|
+
AND ai.is_active = true
|
|
2718
|
+
`;
|
|
2720
2719
|
if (Number(actionsResult[0].count) > 0) {
|
|
2721
2720
|
throw new this.deps.helpers.ErrorHandler(409, "You have already submitted a decision for this level");
|
|
2722
2721
|
}
|
|
2723
|
-
const
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2727
|
-
|
|
2728
|
-
|
|
2729
|
-
|
|
2730
|
-
|
|
2731
|
-
|
|
2732
|
-
|
|
2733
|
-
const prevActionsResult = await tx.$queryRawUnsafe(prevApproversQuery, instanceId, step.level);
|
|
2722
|
+
const prevActionsResult = await tx.$queryRaw`
|
|
2723
|
+
SELECT COUNT(*) AS count
|
|
2724
|
+
FROM core_approval_action a
|
|
2725
|
+
JOIN core_approval_instance ai ON ai.id = a.instance_id
|
|
2726
|
+
WHERE ai.id = ${instanceId}
|
|
2727
|
+
AND a.level < ${step.level}
|
|
2728
|
+
AND a.is_active = true
|
|
2729
|
+
AND ai.is_active = true
|
|
2730
|
+
AND a.acted_by IS NOT NULL
|
|
2731
|
+
`;
|
|
2734
2732
|
if (Number(prevActionsResult[0].count) !== step.level - 1) {
|
|
2735
2733
|
throw new this.deps.helpers.ErrorHandler(403, "You must wait for previous approvers to act first");
|
|
2736
2734
|
}
|