diff --git a/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/ActionButtons.tsx b/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/ActionButtons.tsx
index b679e886..7ed9f586 100644
--- a/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/ActionButtons.tsx
+++ b/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/ActionButtons.tsx
@@ -79,10 +79,12 @@ export default function ActionButtons() {
validateAtKey,
data,
);
- const updateRequestData = consultationSchema.validateSyncAt(
- "update_request",
- data,
- );
+
+ const passed =
+ decisionData.passedConsultationCheck === RadioOptions.YES.value;
+ const updateRequestData = passed
+ ? {}
+ : consultationSchema.validateSyncAt("update_request", data);
const requestBody = {
form_answers: {
...decisionData,
@@ -114,10 +116,12 @@ export default function ActionButtons() {
"staff",
getValues(),
);
- const updateRequestData = consultationSchema.validateSyncAt(
- "update_request",
- getValues(),
- );
+
+ const passed =
+ staffDecision.passedConsultationCheck === RadioOptions.YES.value;
+ const updateRequestData = passed
+ ? {}
+ : consultationSchema.validateSyncAt("update_request", getValues());
const requestBody = {
status: SUBMISSION_REVIEW_STATUS.PENDING_MANAGER_REVIEW,
@@ -141,14 +145,17 @@ export default function ActionButtons() {
const handleCompletingConsultationCheck = async () => {
try {
setIsCompletingConsultationCheck(true);
+
const managerDecision = consultationSchema.validateSyncAt(
"manager",
getValues(),
);
- const updateRequestData = consultationSchema.validateSyncAt(
- "update_request",
- getValues(),
- );
+ const noDecision =
+ managerDecision.passedConsultationCheck === RadioOptions.NO.value;
+ const updateRequestData = noDecision
+ ? consultationSchema.validateSyncAt("update_request", getValues())
+ : {};
+
const passed =
managerDecision.passedConsultationCheck === RadioOptions.YES.value;
const requestBody = {
@@ -161,6 +168,7 @@ export default function ActionButtons() {
},
type: SUBMISSION_REVIEW_ENTRY_TYPE.MANAGER_CONFIRMATION,
};
+
await saveSubmissionReview(requestBody);
setIsCompletingConsultationCheck(false);
notify.success("Consultation Check was completed");
diff --git a/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/constants.ts b/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/constants.ts
index 07dde33e..e22e030a 100644
--- a/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/constants.ts
+++ b/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/constants.ts
@@ -1,37 +1,5 @@
import * as yup from "yup";
-export const consultationSchema = yup.object().shape({
- staff: yup.object().shape({
- passedConsultationCheck: yup
- .string()
- .required("Staff decision is required"),
- }),
- manager: yup.object().shape({
- passedConsultationCheck: yup
- .string()
- .required("Manager decision is required"),
- }),
- update_request: yup
- .object()
- .when(
- ["staff.passedConsultationCheck", "manager.passedConsultationCheck"],
- (values: string[], schema: yup.AnyObject) => {
- const [staff, manager] = values;
- return staff === "NO" && manager !== "YES"
- ? schema.shape({
- reason: yup.string().required("Reason is required"),
- submission_item_types: yup
- .array()
- .nullable()
- .required("Submission items are required")
- .of(yup.number())
- .min(1, "Please select at least one item"),
- })
- : schema;
- },
- ),
-});
-
export const RadioOptions = {
YES: {
label: "Yes, the holder has passed the Consultation Check",
@@ -42,3 +10,41 @@ export const RadioOptions = {
value: "NO",
},
};
+
+export const consultationSchema = yup.lazy((value) => {
+ const baseSchema = {
+ staff: yup.object().shape({
+ passedConsultationCheck: yup
+ .string()
+ .required("Staff decision is required"),
+ }),
+ manager: yup.object().shape({
+ passedConsultationCheck: yup
+ .string()
+ .required("Manager decision is required"),
+ }),
+ update_request: yup.object().shape({}),
+ };
+
+ const no =
+ value.staff.passedConsultationCheck === RadioOptions.NO.value ||
+ value.manager.passedConsultationCheck === RadioOptions.NO.value;
+
+ if (no) {
+ return yup.object().shape({
+ ...baseSchema,
+ update_request: yup.object().shape({
+ reason: yup.string().required("Reason is required"),
+ submission_item_types: yup
+ .array()
+ .nullable()
+ .required("Submission items are required")
+ .typeError("Submission items are required")
+ .of(yup.number())
+ .min(1, "Please select at least one item"),
+ }),
+ });
+ }
+
+ return yup.object().shape(baseSchema);
+});
diff --git a/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/index.tsx b/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/index.tsx
index 261d08e3..3b4dfe5d 100644
--- a/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/index.tsx
+++ b/submit-web/src/components/SubmissionItem/ConsultationRecord/ConsultationRecordStaffView/index.tsx
@@ -15,11 +15,10 @@ export const ConsultationRecordStaffView = () => {
const {
projectId: accountProjectIdParam,
submissionPackageId,
- submissionId: submissionItemId
- } =
- useParams({
- from: "/staff/_staffLayout/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/submissions/$submissionId",
- });
+ submissionId: submissionItemId,
+ } = useParams({
+ from: "/staff/_staffLayout/projects/$projectId/_projectLayout/submission-packages/$submissionPackageId/_submissionLayout/submissions/$submissionId",
+ });
const accountProjectId = Number(accountProjectIdParam);
const submissionId = Number(submissionItemId);
const { data: accountProject } = useGetAccountProjectForStaff({
@@ -31,7 +30,7 @@ export const ConsultationRecordStaffView = () => {
});
const formSubmission = submissionItem?.submissions?.find(
- (submission) => submission.type === SUBMISSION_TYPE.FORM
+ (submission) => submission.type === SUBMISSION_TYPE.FORM,
);
const formData = useMemo(() => {
@@ -61,14 +60,15 @@ export const ConsultationRecordStaffView = () => {
);
const partiesList =
- submissionPackage?.meta?.main_condition?.condition_attributes
- ?.parties_required_to_be_consulted?.split(",") || [];
+ submissionPackage?.meta?.main_condition?.condition_attributes?.parties_required_to_be_consulted?.split(
+ ",",
+ ) || [];
if (!accountProject) return ;
return (
-
+
diff --git a/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/ManagementPlanStaffView/ActionButtons.tsx b/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/ManagementPlanStaffView/ActionButtons.tsx
index 2531d9ab..dfc511af 100644
--- a/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/ManagementPlanStaffView/ActionButtons.tsx
+++ b/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/ManagementPlanStaffView/ActionButtons.tsx
@@ -78,10 +78,10 @@ export default function ActionButtons() {
validateAtKey,
data,
);
- const updateRequestData = managementPlanReviewSchema.validateSyncAt(
- "update_request",
- data,
- );
+ const passed = decisionData.passedReview === RadioOptions.YES.value;
+ const updateRequestData = passed
+ ? {}
+ : managementPlanReviewSchema.validateSyncAt("update_request", data);
const requestBody = {
form_answers: {
...decisionData,
@@ -114,10 +114,14 @@ export default function ActionButtons() {
"staff",
getValues(),
);
- const updateRequestData = managementPlanReviewSchema.validateSyncAt(
- "update_request",
- getValues(),
- );
+
+ const passed = staffDecision.passedReview === RadioOptions.YES.value;
+ const updateRequestData = passed
+ ? {}
+ : managementPlanReviewSchema.validateSyncAt(
+ "update_request",
+ getValues(),
+ );
const requestBody = {
status: SUBMISSION_REVIEW_STATUS.PENDING_MANAGER_REVIEW,
@@ -146,14 +150,18 @@ export default function ActionButtons() {
"manager",
getValues(),
);
- const updateRequestData = managementPlanReviewSchema.validateSyncAt(
- "update_request",
- getValues(),
- );
+
const passed = [
RadioOptions.YES.value,
RadioOptions.YES_DEFAULT.value,
].includes(managerDecision.passedReview);
+
+ const updateRequestData = passed
+ ? {}
+ : managementPlanReviewSchema.validateSyncAt(
+ "update_request",
+ getValues(),
+ );
const requestBody = {
status: passed
? SUBMISSION_REVIEW_STATUS.APPROVED
@@ -164,6 +172,7 @@ export default function ActionButtons() {
},
type: SUBMISSION_REVIEW_ENTRY_TYPE.MANAGER_CONFIRMATION,
};
+
await saveSubmissionReview(requestBody);
setIsCompletingReview(false);
notify.success("Review was completed");
diff --git a/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/ManagementPlanStaffView/constants.ts b/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/ManagementPlanStaffView/constants.ts
index 76756ab0..0210d16e 100644
--- a/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/ManagementPlanStaffView/constants.ts
+++ b/submit-web/src/components/SubmissionItem/ManagementPlanSubmission/ManagementPlanStaffView/constants.ts
@@ -1,33 +1,5 @@
import * as yup from "yup";
-export const managementPlanReviewSchema = yup.object().shape({
- staff: yup.object().shape({
- passedReview: yup.string().required("Staff decision is required"),
- }),
- manager: yup.object().shape({
- passedReview: yup.string().required("Manager decision is required"),
- }),
- update_request: yup
- .object()
- .when(
- ["staff.passedReview", "manager.passedReview"],
- (values: string[], schema: yup.AnyObject) => {
- const [staff, manager] = values;
- return staff === "NO" && manager !== "YES"
- ? schema.shape({
- reason: yup.string().required("Reason is required"),
- submission_item_types: yup
- .array()
- .nullable()
- .required("Submission items are required")
- .of(yup.number())
- .min(1, "Please select at least one item"),
- })
- : schema;
- },
- ),
-});
-
export const RadioOptions = Object.freeze({
YES: {
label: "Yes, the holder passed the Management Plan Review",
@@ -42,3 +14,37 @@ export const RadioOptions = Object.freeze({
value: "yes_default",
},
});
+
+export const managementPlanReviewSchema = yup.lazy((value) => {
+ const baseSchema = {
+ staff: yup.object().shape({
+ passedReview: yup.string().required("Staff decision is required"),
+ }),
+ manager: yup.object().shape({
+ passedReview: yup.string().required("Manager decision is required"),
+ }),
+ update_request: yup.object().shape({}),
+ };
+
+ const no =
+ value.staff.passedReview === RadioOptions.NO.value ||
+ value.manager.passedReview === RadioOptions.NO.value;
+
+ if (no) {
+ return yup.object().shape({
+ ...baseSchema,
+ update_request: yup.object().shape({
+ reason: yup.string().required("Reason is required"),
+ submission_item_types: yup
+ .array()
+ .nullable()
+ .required("Submission items are required")
+ .typeError("Submission items are required")
+ .of(yup.number())
+ .min(1, "Please select at least one item"),
+ }),
+ });
+ }
+
+ return yup.object().shape(baseSchema);
+});