import { Autocomplete, Button, Checkbox, Divider, FormControl, FormControlLabel, // FormGroup, // FormControlLabel, FormHelperText, FormLabel, IconButton, InputAdornment, InputLabel, ListItem, ListItemIcon, ListItemText, MenuItem, Radio, // Radio, RadioGroup, Select, TextField, Typography, } from "@mui/material"; import { Grid } from "../../../../components/grid/Grid"; import { SPACING } from "../../../../data/spacing"; import { useEffect } from "react"; import { DatePicker } from "@mui/x-date-pickers"; import { useDispatch, useSelector } from "react-redux"; import { avicultureNewRequest } from "../../services/aviculture-new-request"; import { DRAWER, LOADING_END, LOADING_START, } from "../../../../lib/redux/slices/appSlice"; import { useFormik } from "formik"; import { Yup } from "../../../../lib/yup/yup"; import moment from "moment"; import { useState } from "react"; import { avicultureGetHatchingData } from "../../services/aviculture-get-hatching-data"; import { avicultureGetPoultry } from "../../services/aviculture-get-poultry"; import { avicultureGetChickenPrice } from "../../services/aviculture-get-chicken-price"; import DeleteIcon from "@mui/icons-material/Delete"; import { avicultureGetRequests } from "../../services/aviculture-requests"; import { useContext } from "react"; import { AppContext } from "../../../../contexts/AppContext"; import AddIcon from "@mui/icons-material/Add"; // import { NumericFormat } from "react-number-format"; import { NumberInput } from "../../../../components/number-format-custom/NumberFormatCustom"; import { DialogAlert } from "../../../../components/dialog-alert/DialogAlert"; import useUserProfile from "../../../authentication/hooks/useUserProfile"; // import { NumberFormatCustom } from "../../../../components/number-format-custom/NumberFormatCustom"; import DoneIcon from "@mui/icons-material/Done"; // import { SelectCheck } from "../../../../components/select-check/SelectCheck"; import { avicultureGetSlaughters } from "../../services/aviculture-get-slaughters"; import { avicultureGetUnions } from "../../services/aviculture-get-unions"; import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl"; import { provinceGetFreeSalesRequestsService } from "../../../province/services/province-get-free-sales-requests"; export const AvicultureFreeSaleNewRequest = () => { const [openNotif] = useContext(AppContext); const [hatchingKey, sethatchingKey] = useState(""); const [hatchingData, setHatchingData] = useState(""); const [hatchingSelected, setHatchingSelected] = useState(""); const [poultryData, setPoultryData] = useState(""); const [poultryKey, setPolutryKey] = useState(""); const [quantity, setQuantity] = useState(""); const [losses, setlosses] = useState(""); const [leftOvers, setLeftOvers] = useState(""); const [isUnion] = useState(false); const [isStockMarket, setIsStockMarket] = useState(false); const [pricingKey, setPriceKey] = useState(); const [chickenBreed, setChickenBreed] = useState(""); const [chickenCanRequest, setChickenCanRequest] = useState(""); const [, userProfile] = useUserProfile(); const inputArr = [ { type: "text", id: 1, value: "", }, ]; const inputArrPrices = [ { type: "text", id: 1, value: "", }, ]; const [arr, setArr] = useState(inputArr); const [arrPrices, setArrPrices] = useState(inputArrPrices); const dispatch = useDispatch(); const { avicultureChickenPrice } = useSelector( (state) => state.avicultureSlice ); useEffect(() => { dispatch(LOADING_START()); dispatch(avicultureGetChickenPrice()); dispatch(avicultureGetSlaughters()); dispatch(LOADING_END()); }, []); const [unions, setUnions] = useState(); const [unionSelected, setUnionSelected] = useState(); useEffect(() => { dispatch(LOADING_START()); dispatch(avicultureGetUnions()).then((r) => { setUnionSelected(r.payload.data[0]?.key); setUnions(r.payload.data); }); dispatch(LOADING_END()); }, []); const addInput = () => { if (arr.length < 3) { setArr((prevState) => { return [ ...prevState, { type: "text", value: "", }, ]; }); setArrPrices((prevState) => { return [ ...prevState, { type: "text", value: "", }, ]; }); } }; const removeInput = () => { const number = arr.length - 1; if (number !== 0) { const filteredArrayPrice = arr.filter((object, i) => i !== number); const filteredArrayTime = arrPrices.filter((object, i) => i !== number); setArr(filteredArrayPrice); setArrPrices(filteredArrayTime); } // setArr((s) => { // return s.splice(arr.findIndex((item) => item.id === number, 1)); // }); // setArrPrices((s) => { // return s.splice(arr.findIndex((item) => item.id === number, 1)); // }); }; const handleChange = (e) => { e.preventDefault(); const index = e.target.id; setArr((s) => { const newArr = s.slice(); newArr[index].value = e.target.value; return newArr; }); }; const handleChangeTime = (e) => { e.preventDefault(); const index = e.target.id; setArrPrices((s) => { const newArrPrice = s.slice(); newArrPrice[index].value = e.target.dataset.value; return newArrPrice; }); }; useEffect(() => { if (avicultureChickenPrice) { setPriceKey(avicultureChickenPrice?.key); } }, [avicultureChickenPrice]); const formik = useFormik({ initialValues: { noChicken: "", sellType: { cash: true, haveTime: false, }, price1: "", price2: "", price3: "", slaughterDate: moment(Date()).format("YYYY-MM-DD"), period1: "4", period2: "4", period3: "4", weight: "", losses: "0", isUnion, isStockMarket, isAccepted: false, selectedSlaughters: [], name: "", lastname: "", mobile: "", province: "", city: "", buyerType: "", }, validationSchema: Yup.object({ noChicken: Yup.string() .required("این فیلد اجباری است!") .typeError("لطفا عدد وارد کنید!") .min(0, "تعداد وارد شده از حداقل ممکن کمتر است") .max(chickenCanRequest, "تعداد وارد شده از کل موجودی بیشتر است"), isAccepted: Yup.boolean() .test("req", "باید تعهد نامه را بپذیرید!", (val, context) => { return context.originalValue && context.originalValue === true; }) .required("این فیلد اجباری است!"), price1: Yup.number() .typeError("لطفا عدد وارد کنید!") .min( avicultureChickenPrice?.floorPrice, "قیمت وارد شده از کف قیمت امروز کمتر است" ) .max( avicultureChickenPrice?.ceilingPrice, "قیمت وارد شده از سقف قیمت امروز بیشتر است" ), price2: Yup.number() .typeError("لطفا عدد وارد کنید!") .min( avicultureChickenPrice?.floorPrice, "قیمت وارد شده از کف قیمت امروز کمتر است" ) .max( avicultureChickenPrice?.ceilingPrice, "قیمت وارد شده از سقف قیمت امروز بیشتر است" ), price3: Yup.number() .typeError("لطفا عدد وارد کنید!") .min( avicultureChickenPrice?.floorPrice, "قیمت وارد شده از کف قیمت امروز کمتر است" ) .max( avicultureChickenPrice?.ceilingPrice, "قیمت وارد شده از سقف قیمت امروز بیشتر است" ), weight: Yup.number() .test("weight", "وزن را تا دو رقم اعشار وارد کنید", (val, context) => { return ( context.originalValue && context.originalValue.toString().length <= 4 ); }) .required("این فیلد اجباری است!") .typeError("لطفا وزن را وارد کنید!"), losses: Yup.number() .required("این فیلد اجباری است!") .max(quantity, "تلفات وارد شده از باقیمانده بیشتر است!") .typeError("لطفا تعداد تلفات را وارد کنید!"), sellType: Yup.object() .test("sellType", "نحوه فروش را انتخاب کنید!", (val, context) => { return ( context.originalValue && Object.values(context.originalValue).some((item) => item === true) ); }) .required("این فیلد اجباری است!"), name: Yup.string().required("نام اجباری است"), lastname: Yup.string().required("نام خانوادگی اجباری است"), mobile: Yup.string().required("موبایل اجباری است"), province: Yup.string().required("استان اجباری است"), city: Yup.string().required("شهرستان اجباری است"), buyerType: Yup.string().required("نوع خریدار اجباری است"), }), }); const penaltyPrice = formik.values.noChicken * 1000; const dialogContent = ( <> اینجانب {userProfile.fullname} موافقت خود را نسبت به موارد ذکر شده اعلام می نمایم. > ); useEffect(() => { dispatch(LOADING_START()); dispatch(avicultureGetPoultry()).then((r) => { setPoultryData(r.payload.data); dispatch(LOADING_END()); }); }, []); useEffect(() => { let newVal = formik.values.weight; const mystring = formik.values.weight.toString().split(".").join(""); if (formik.values.weight) { if (mystring.length <= 3) { if (mystring.length === 2) { newVal = mystring[0] + "." + mystring[1]; } if (mystring.length === 3) { newVal = mystring[0] + "." + mystring[1] + mystring[2]; } } } if (isNaN(Number.parseFloat(newVal))) { formik.setFieldValue("weight", ""); } else { formik.setFieldValue("weight", Number.parseFloat(newVal)); } }, [formik.values.weight]); useEffect(() => { if (isStockMarket) { dispatch(avicultureGetChickenPrice()).then((r) => { if (Array.isArray(r.payload.data)) { openNotif({ vertical: "top", horizontal: "center", msg: "قیمت روز مرغ در سامانه ثبت نشده است.", severity: "error", }); dispatch(DRAWER({ right: false, bottom: false, content: null })); } else { dispatch(LOADING_END()); } }); } }, [isStockMarket]); useEffect(() => { formik.validateForm(); }, []); useEffect(() => { if (poultryKey) { dispatch(LOADING_START()); dispatch(avicultureGetHatchingData(poultryKey)).then((r) => { if (r.payload.data) { setHatchingData(r.payload.data); dispatch(LOADING_END()); } else { openNotif({ vertical: "top", horizontal: "center", msg: "اطلاعات جوجه ریزی یافت نشد!", severity: "error", }); } dispatch(LOADING_END()); }); } }, [poultryKey]); useEffect(() => { setChickenCanRequest( formik.values.noChicken <= Number(leftOvers) && Number(formik.values.losses) <= Number(leftOvers) ? Number(leftOvers) - Number(formik.values.losses) : 0 ); }, [formik.values.losses, leftOvers, formik.values.noChicken]); useEffect(() => { setQuantity(hatchingSelected.quantity); setlosses(hatchingSelected.losses); setLeftOvers(hatchingSelected.leftOver); }, [hatchingSelected]); // const handleSellTypeChange = (event) => { // formik.setFieldValue("sellType", { // ...formik.values.sellType, // [event.target.name]: event.target.checked, // }); // }; return ( ({ id: i.key, label: i.unitName, })) : [] } onChange={(event, value) => { setPolutryKey(value.id); }} renderInput={(params) => ( )} /> {!poultryData[0]?.provinceAllowSellFree && ( اجازه فروش خارج از استان ندارید! )} {poultryData[0]?.provinceAllowSellFree && ( { return { id: i.key, race: i.chickenBreed, selected: i, label: `دوره ${i.period} سالن ${i.hall} نژاد ${i.chickenBreed} باقیمانده ${i.leftOver} قطعه`, }; }) : [] } onChange={(event, value) => { sethatchingKey(value.id); setHatchingSelected(value.selected); let race = value.race; if (race.includes("-")) { race = "ترکیبی"; } setChickenBreed(race); }} renderInput={(params) => ( )} /> )} {hatchingSelected && ( اطلاعات کشتار {getRoleFromUrl() !== "Poultry" && ( )} {/* */} prop.palette.grey["A700"]} variant={"caption"} > باقیمانده: {formik.values.noChicken ? formik.values.noChicken <= Number(leftOvers) && Number(formik.values.losses) <= Number(leftOvers) && Number(leftOvers) - Number(formik.values.losses) - Number(formik.values.noChicken) >= 0 ? Math.abs( Number(leftOvers) - Number(formik.values.losses) - Number(formik.values.noChicken) ) : 0 : Number(leftOvers)} قطعه prop.palette.grey["A700"]} variant={"caption"} > سن مرغ: {hatchingSelected.age} روزه } value={formik.values.slaughterDate} error={ formik.touched.slaughterDate ? Boolean(formik.errors.slaughterDate) : null } onChange={(e) => { formik.setFieldValue( "slaughterDate", moment(e).format("YYYY-MM-DD") ); }} onBlur={formik.handleBlur} helperText={ formik.touched.slaughterDate && Boolean(formik.errors.slaughterDate) ? formik.errors.slaughterDate : null } /> کیلوگرم ), }} value={formik.values.weight} error={ formik.touched.weight ? Boolean(formik.errors.weight) : null } onChange={formik.handleChange} onBlur={formik.handleBlur} helperText={ formik.touched.weight && Boolean(formik.errors.weight) ? formik.errors.weight : null } /> {/* نحوه فروش */} { setIsStockMarket(event.currentTarget.value); }} > {/* } label="فروش اتحادیه" /> */} {/* } label="فروش مزایده ای" /> */} {isStockMarket === "فروش مزایده ای" && ( prop.palette.grey["A700"]} variant={"caption"} > کف قیمت امروز: {avicultureChickenPrice?.floorPrice ? avicultureChickenPrice?.floorPrice.toLocaleString() : "نامشخص"}{" "} {" "} ریال prop.palette.grey["A700"]} variant={"caption"} > سقف قیمت امروز: {avicultureChickenPrice?.ceilingPrice ? avicultureChickenPrice?.ceilingPrice.toLocaleString() : "نامشخص"}{" "} {" "} ریال {arr.map((item, i) => { return ( پیشنهاد {i + 1} بازه زمانی (ساعت) 1 2 3 4 5 6 7 8 9 10 {formik.touched.period1 && Boolean(formik.errors.period1) ? formik.errors.period1 : null} {/* */} ); })} {arr.length > 1 && ( )} {arr.length < 3 && ( افزودن پیشنهاد جدید )} در صورت عدم فروش در بورس، از طریق اتحادیه فروش برود )} اطلاعات خریدار نوع خریدار } label="کشتارگاه" /> } label="کشتارکن" /> } label="انجماد" /> {formik.touched.buyerType && formik.errors.buyerType ? ( {formik.errors.buyerType} ) : null} {/* نحوه فروش } label="نقدی" /> } label="زمان دار (تا یک ماه)" /> {formik.touched.sellType && Boolean(formik.errors.sellType) ? formik.errors.sellType : null} */} {unions?.length > 1 && ( <> انتخاب اتحادیه { setUnionSelected(event.currentTarget.value); }} > {unions.map((item) => { return ( <> } label={item.unitName} /> > ); })} > )} { formik.setFieldValue("isAccepted", false); }} > رد { formik.setFieldValue("isAccepted", true); }} > موافقم } btnTitle={"با تعهد نامه موافق هستم!"} isAccepted={formik.values.isAccepted} /> { dispatch(LOADING_START()); if (isStockMarket === "فروش مزایده ای") { dispatch( avicultureNewRequest({ operator_key: unions?.length > 1 ? unionSelected : "", poultry_hatching_key: hatchingKey, quantity: formik.values.noChicken, send_date: formik.values.slaughterDate, chicken_breed: chickenBreed, Index_weight: formik.values.weight, union: formik.values.isUnion, losses: formik.values.losses !== "" ? formik.values.losses : 0, auction: true, auction_list: arr.map((item, i) => { return { pricing_key: pricingKey, fee: item.value ? item.value : avicultureChickenPrice?.floorPrice, hour: arrPrices[i].value ? arrPrices[i].value : "4", }; }), }) ).then((r) => { dispatch(LOADING_END()); if (r.error) { if (r.error.message.includes("403")) { openNotif({ vertical: "top", horizontal: "center", msg: "قیمت پیشنهادی نباید از حداکثر قیمت روز بیشتر باشد.", severity: "error", }); } else { openNotif({ vertical: "top", horizontal: "center", msg: "مشکلی پیش آمده است!", severity: "error", }); } } else { dispatch(avicultureGetRequests()); openNotif({ vertical: "top", horizontal: "center", msg: "عملیات با موفقیت انجام شد.", severity: "success", }); dispatch( DRAWER({ right: false, bottom: false, content: null }) ); } }); } else { dispatch( avicultureNewRequest({ operator_key: unions?.length > 1 ? unionSelected : "", poultry_hatching_key: hatchingKey, quantity: formik.values.noChicken, send_date: formik.values.slaughterDate, chicken_breed: chickenBreed, Index_weight: formik.values.weight, losses: formik.values.losses !== "" ? formik.values.losses : 0, auction_list: [], cash: formik.values.sellType.cash, credit: formik.values.sellType.haveTime, kill_house_list: formik.values.selectedSlaughters, buyer: { firstName: formik.values.name, lastName: formik.values.lastname, mobile: formik.values.mobile, province: formik.values.province, city: formik.values.city, buyerType: formik.values.buyerType, }, }) ) .then((r) => { dispatch(LOADING_END()); if (r.payload.error) { openNotif({ vertical: "top", horizontal: "center", msg: r.payload.error, severity: "error", }); } else { openNotif({ vertical: "top", horizontal: "center", msg: "عملیات با موفقیت انجام شد.", severity: "success", }); dispatch(avicultureGetRequests()); dispatch(provinceGetFreeSalesRequestsService()); dispatch( DRAWER({ right: false, bottom: false, content: null }) ); } }) .catch((e) => console.log(e)); } }} size="large" variant="contained" > ثبت درخواست )} ); };