import { zodResolver } from "@hookform/resolvers/zod"; import Button from "../../../components/Button/Button"; import { Grid } from "../../../components/Grid/Grid"; import Textfield from "../../../components/Textfeild/Textfeild"; import { useForm, Controller } from "react-hook-form"; import { zValidateNumber, zValidateStringOptional, } from "../../../data/getFormTypeErrors"; import { z } from "zod"; import { useApiMutation } from "../../../utils/useApiRequest"; import { useToast } from "../../../hooks/useToast"; import { useModalStore } from "../../../context/zustand-store/appStore"; import { getToastResponse } from "../../../data/getToastResponse"; import { FormApiBasedAutoComplete } from "../../../components/FormItems/FormApiBasedAutoComplete"; import Typography from "../../../components/Typography/Typography"; type Props = { getData: () => void; item?: any; isSubmit?: boolean; }; export const QuotaAllocateToStakeHolders = ({ getData, item, isSubmit, }: Props) => { const showToast = useToast(); const { closeModal } = useModalStore(); const cooperativeValue = isSubmit ? item?.quota?.brokers?.find( (broker: any) => broker?.broker_name === "تعاونی", )?.value : item?.quota_distribution?.quota?.brokers?.find( (broker: any) => broker?.broker_name === "تعاونی", )?.value; const schema = z.object({ share_amount: zValidateNumber("سهم از تعرفه").max( cooperativeValue, `سهم از تعرفه نمی‌تواند بیشتر از ${cooperativeValue?.toLocaleString()} باشد!`, ), organization: zValidateNumber("سازمان"), assigned_organization: zValidateNumber("سازمان تخصیص دهنده"), weight: zValidateNumber("وزن"), description: zValidateStringOptional("(اختیاری) توضیحات"), }); type FormValues = z.infer; const { control, handleSubmit, setValue, trigger, formState: { errors }, } = useForm({ resolver: zodResolver(schema), defaultValues: { share_amount: isSubmit ? "" : item?.share_amount || "", description: isSubmit ? "" : item?.quota_distribution?.description || "", weight: isSubmit ? "" : item?.quota_distribution?.weight || "", }, }); const mutation = useApiMutation({ api: `/pos_device/web/v1/pos/holders_share/${ isSubmit ? "" : item?.id + "/" }`, method: isSubmit ? "post" : "put", }); const onSubmit = async (data: FormValues) => { try { const payload = { distribution: { description: data.description || "", quota: isSubmit ? item?.id : item.quota_distribution?.quota?.id, weight: data.weight || 0, assigned_organization: data.assigned_organization, }, stakeholders: data.organization, share_amount: data.share_amount || 0, }; await mutation.mutateAsync(payload as any); showToast( getToastResponse(isSubmit ? false : true, "تخصیص به زیر مجموعه"), "success", ); getData(); closeModal(); } catch (error: any) { if (error?.status === 400) { showToast( error?.response?.data?.detail || error?.response?.data?.message, "error", ); closeModal(); } else if (error?.status === 403) { showToast( error?.response?.data?.message || "این مورد تکراری است!", "error", ); } else { showToast( error?.response?.data?.message || "خطا در ثبت اطلاعات!", "error", ); } } }; return (
سهم تعاونی از فروش: {cooperativeValue?.toLocaleString()} ریال حداکثر وزن قابل تخصیص:{" "} {isSubmit ? item?.remaining_weight?.toLocaleString() : ( item?.quota_distribution?.weight + item?.quota_distribution?.parent_distribution_remaining_weight )?.toLocaleString()}{" "} کیلوگرم ( <> { setValue("organization", r.key1); setValue("assigned_organization", r.key2); trigger("organization"); }} /> )} /> ( )} /> ( )} /> ( )} />
); };