diff --git a/src/components/input/DateInput.tsx b/src/components/input/DateInput.tsx
index 8c3dd35d..79870274 100644
--- a/src/components/input/DateInput.tsx
+++ b/src/components/input/DateInput.tsx
@@ -213,7 +213,7 @@ const DateInput = ({
{
);
const hasApprovable = selectedRowsData.some(
- (row) => row.latest_approval.step_number === 1
+ (row) =>
+ row.latest_approval.step_number === 1 &&
+ row.latest_approval.action !== 'REJECTED'
);
const hasRejectable = selectedRowsData.some(
- (row) => row.latest_approval.step_number === 2
+ (row) =>
+ row.latest_approval.step_number === 1 &&
+ row.latest_approval.action !== 'REJECTED'
);
- const disableApprove = !hasApprovable || hasRejectable;
- // const disableReject = !hasRejectable || hasApprovable;
+ const disableApprove = !hasApprovable;
+ const disableReject = !hasRejectable;
const idsToProcess =
approveAction === 'APPROVED'
@@ -204,15 +208,9 @@ const MarketingTable = () => {
const approveMarketingHandler = async (notes: string) => {
let idsToProcess: number[] = [];
- if (approveAction === 'APPROVED') {
- idsToProcess = selectedRowsData
- .filter((row) => row.latest_approval.step_number === 1)
- .map((row) => row.id);
- } else if (approveAction === 'REJECTED') {
- idsToProcess = selectedRowsData
- .filter((row) => row.latest_approval.step_number === 2)
- .map((row) => row.id);
- }
+ idsToProcess = selectedRowsData
+ .filter((row) => row.latest_approval.step_number === 1)
+ .map((row) => row.id);
if (idsToProcess.length === 0) {
toast.error(`Tidak ada data yang valid untuk di ${approveAction}.`);
@@ -263,8 +261,8 @@ const MarketingTable = () => {
});
const getRowCanSelect = (row: Row): boolean => {
- const step = row.original.latest_approval?.step_number;
- return step === 1;
+ const approval = row.original.latest_approval;
+ return approval?.step_number === 1 && approval?.action !== 'REJECTED';
};
return (
@@ -298,7 +296,7 @@ const MarketingTable = () => {
Approve
- {/* */}
+
{
- // setApprovalAction('REJECTED');
- // confirmationModal.openModal();
- // };
+ const rejectClickHandler = () => {
+ setApprovalAction('REJECTED');
+ confirmationModal.openModal();
+ };
const deliveryClickHandler = () => {
deliveryModal.openModal();
@@ -87,10 +87,11 @@ const MarketingDetail = ({
const confirmationModalDeleteClickHandler = async () => {
setIsLoading(true);
const res = await MarketingApi.delete(initialValues?.id as number);
- setIsLoading(false);
deleteModal.closeModal();
+ router.push('/marketing');
toast.success(res?.message as string);
refresh?.();
+ setIsLoading(false);
};
const confirmationModalApproveClickHandler = async (notes: string) => {
@@ -131,24 +132,30 @@ const MarketingDetail = ({
)}
- {initialValues?.latest_approval?.step_number != 3 && (
+ {initialValues?.latest_approval?.step_number == 1 && (
<>
- {/* */}
+
>
)}
{initialValues?.latest_approval?.step_number == 2 && (
diff --git a/src/components/pages/marketing/form/MarketingForm.tsx b/src/components/pages/marketing/form/MarketingForm.tsx
index 1a5ec4ef..4fe3895e 100644
--- a/src/components/pages/marketing/form/MarketingForm.tsx
+++ b/src/components/pages/marketing/form/MarketingForm.tsx
@@ -162,7 +162,6 @@ const MarketingForm = ({
useState(null);
const [selectedDeliveryProduct, setSelectedDeliveryProduct] =
useState(null);
-
const [deliveryOrderValues, setDeliveryOrderValues] = useState<
DeliveryOrderProductFormValues[]
>(
@@ -174,7 +173,7 @@ const MarketingForm = ({
)
);
- // Repeater Props
+ // ================== REPEATER ==================
const addSOModal = useModal();
const addDOModal = useModal();
const [rowSOSelection, setRowSOSelection] = useState>(
@@ -190,12 +189,13 @@ const MarketingForm = ({
parseInt(item)
);
- // End Repeater Props
+ // ================== FETCH OPTIONS ==================
const {
options: customerOptions,
isLoadingOptions: isLoadingCustomerOptions,
} = useSelect(CustomerApi.basePath, 'id', 'name');
+ // ================== SETUP FORMIK ==================
const formikInitialValues = useMemo<
SalesOrderFormValues & DeliveryOrderFormValues
>(() => {
@@ -222,7 +222,6 @@ const MarketingForm = ({
),
};
}, [initialValues]);
-
const formik = useFormik({
enableReinitialize: true,
initialValues: formikInitialValues,
@@ -296,7 +295,6 @@ const MarketingForm = ({
afterSubmit?.();
},
});
-
const grandTotal = useMemo(() => {
return formik.values.sales_order.reduce(
(total, product) =>
@@ -305,6 +303,7 @@ const MarketingForm = ({
);
}, [formik.values.sales_order]);
+ // ================== FORM REPEATER HANDLER ==================
const createMarketingHandler = async (values: CreateSalesOrderPayload) => {
setIsLoading(true);
console.log(values);
@@ -334,7 +333,6 @@ const MarketingForm = ({
}
setIsLoading(false);
};
-
const createDeliveryHandler = async (values: CreateDeliveryOrderPayload) => {
setIsLoading(true);
console.log(initialValues?.id);
@@ -350,9 +348,7 @@ const MarketingForm = ({
)
) ?? []
);
- router.push(
- `/marketing/detail/delivery-orders/edit?marketingId=${initialValues?.id}`
- );
+ router.push(`/marketing/detail?marketingId=${initialValues?.id}`);
}
if (isResponseError(createDeliveryRes)) {
console.log(createDeliveryRes);
@@ -360,7 +356,6 @@ const MarketingForm = ({
}
setIsLoading(false);
};
-
const updateDeliveryHandler = async (values: UpdateDeliveryOrderPayload) => {
setIsLoading(true);
console.log(initialValues?.id);
@@ -388,6 +383,7 @@ const MarketingForm = ({
setIsLoading(false);
};
+ // ================== MARKETING HANDLER ==================
const deleteMarketingHandler = async () => {
setIsLoading(true);
console.log(initialValues?.id);
@@ -404,9 +400,8 @@ const MarketingForm = ({
}
setIsLoading(false);
deleteModal.closeModal();
- router.push('/marketing/sales-orders');
+ router.push('/marketing');
};
-
const handleChangeCustomer = useCallback(
(val: OptionType | OptionType[] | null) => {
formik.setFieldValue('customer_id', (val as OptionType)?.value);
@@ -414,8 +409,11 @@ const MarketingForm = ({
},
[formik]
);
+ const handleDelete = useCallback(() => {
+ deleteModal.openModal();
+ }, [deleteModal]);
- // Repeater Handle
+ // ================== SALES ORDER HANDLER ==================
const handleDeleteSO = useCallback(
(id: number) => {
const currentProducts = formik.values.sales_order;
@@ -436,9 +434,6 @@ const MarketingForm = ({
);
setRowSOSelection({});
}, [formik, selectedRowSOIds]);
- const handleDelete = useCallback(() => {
- deleteModal.openModal();
- }, [deleteModal]);
const handleAddSOClick = useCallback(() => {
setSelectedMarketingProduct(null);
addSOModal.openModal();
@@ -458,6 +453,7 @@ const MarketingForm = ({
[formik, addSOModal]
);
+ // ================== DELIVERY ORDER HANDLER ==================
const handleDeleteDO = useCallback(
(id: number) => {
const currentProducts = formik.values.delivery_order;
@@ -482,12 +478,10 @@ const MarketingForm = ({
setRowDOSelection({});
}, [formik, selectedRowDOIds]);
-
const handleAddDOClick = useCallback(() => {
setSelectedDeliveryProduct(null);
addDOModal.openModal();
}, [addDOModal]);
-
const handleAddSubmitDO = useCallback(
async (values: DeliveryOrderProductFormValues) => {
const newValues = {
@@ -526,7 +520,6 @@ const MarketingForm = ({
},
[formik, addDOModal]
);
- // End Repeater Handle
const memoSalesOrder = formik.values.sales_order;
@@ -545,6 +538,7 @@ const MarketingForm = ({
title={`${formType == 'add' || formType == 'add_deliver' ? 'Tambah' : 'Edit'} ${formType === 'add_deliver' || formType === 'edit_deliver' ? 'Delivery' : 'Sales'} Order`}
backUrl='/marketing'
/>
+ {/* Input Cutomer And Date */}
+
+ {/* Input Table Repeater Sales Order */}
{(formType == 'add' || formType == 'edit') && (
- {/* {JSON.stringify(initialValues)}
- {JSON.stringify(formik.values)}
- {JSON.stringify(formik.errors)}
*/}
)}
+
+ {/* Input Table Repeater Delivery Order */}
{(formType == 'add_deliver' || formType == 'edit_deliver') &&
initialValues?.sales_order &&
initialValues?.sales_order.length > 0 && (
@@ -611,11 +606,6 @@ const MarketingForm = ({
wrapper: 'bg-white w-full',
}}
>
- {/* {JSON.stringify(memoSalesOrder)} */}
- {/* {JSON.stringify(memoDeliveryOrder)} */}
- {/*
- {JSON.stringify(formik.errors)}
- */}
)}
+ {/* Input Notes */}
+
+ {/* Form Actions */}
+
+ {/* Actions button */}
{formType == 'edit' && (
)}
+
+ {/* Modals */}