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 { LabelField } from "../../../../components/label-field/LabelField"; 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 { 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 { provinceGetPoultry } from "../../services/province-get-poultry"; import { CarPelak } from "../../../../components/car-pelak/CarPelak"; import { avicultureGetWageType } from "../../services/aviculture-get-wage-type"; import { provinceFreeSaleBuyers } from "../../../province/services/province-free-sales-get-buyers"; import RemoveIcon from "@mui/icons-material/Remove"; import { provincePolicyGetWeightRange } from "../../../province/services/province-policy-get-weight-range"; import { isValidIndexWeight } from "../../../../utils/isValidIndexWeight"; export const ProvinceFreeSaleNewRequest = ({ fetchApiData }) => { 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 [poultry, setPoultry] = useState(); const [buyersData, setBuyersData] = useState([]); const [buyerSelected, setBuyerSelected] = useState(); const [buyerItem, setBuyerItem] = useState(); const [selectedHatchingLabel, setSelectedHatchingLabel] = useState(); const [payerValue, setPayerValue] = useState("poultry"); const [submitDriver, setSubmitDriver] = useState(false); const [transportHealthCodes, setTransportHealthCodes] = useState([]); const [showHealthCodeForm, setShowHealthCodeForm] = useState(false); const handleChangePayer = (event) => { setPayerValue(event.target.value); if (event.target.value === "poultry") { formikPayer.setFieldValue("mobile", poultry?.user?.mobile); } else { if (buyerItem) { formikPayer.setFieldValue("mobile", buyerItem.mobile); } else { formikPayer.setFieldValue("mobile", ""); } } }; // const [, userProfile] = useUserProfile(); const [driverPelak, setDriverPelak] = useState([]); const carPelakHandleChange = (pelak1, pelak2, pelak3, pelak4) => { setDriverPelak([pelak1, pelak2, pelak3, pelak4]); }; 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 [wageType, setWageType] = useState(); const { weightRange } = useSelector((state) => state.provinceSlice); const dispatch = useDispatch(); const { avicultureChickenPrice } = useSelector( (state) => state.avicultureSlice ); useEffect(() => { dispatch(LOADING_START()); dispatch(avicultureGetChickenPrice()); dispatch(avicultureGetSlaughters()); dispatch(avicultureGetWageType()).then((r) => { setWageType(r.payload.data.status); }); dispatch(provinceFreeSaleBuyers()).then((r) => { setBuyersData(r.payload.data); }); dispatch(LOADING_END()); }, []); const [unions, setUnions] = useState(); const [unionSelected, setUnionSelected] = useState(); useEffect(() => { dispatch(LOADING_START()); dispatch(provincePolicyGetWeightRange()); dispatch(avicultureGetUnions()).then((r) => { if (r?.payload?.data?.length > 0) { setUnions(r?.payload?.data[0]?.key); } else { setUnions([]); } }); 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: [], killer_kill_house_city: "", killer_kill_house_province: "", killer_kill_house_unit_name: "", kill_house_unique_id: "", interface_number: "", }, 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("این فیلد اجباری است!"), interface_number: Yup.string() .min(11, "شماره موبایل باید 11 رقم باشد") .max(11, "شماره موبایل باید 11 رقم باشد") .matches(/^09\d{9}$/, "شماره موبایل باید با 09 شروع شود و 11 رقم باشد"), }), }); const formikDriver = useFormik({ initialValues: { driverName: "", driverMobile: "", driverCar: "", driverhealthCode: "", }, validationSchema: Yup.object({ driverName: Yup.string().required("این فیلد اجباری است!"), driverMobile: Yup.string() .required("این فیلد اجباری است!") .min(11, "شماره موبایل باید 11 رقم باشد") .max(11, "شماره موبایل باید 11 رقم باشد") .matches(/^09\d{9}$/, "شماره موبایل باید با 09 شروع شود و 11 رقم باشد"), driverCar: Yup.string().required("این فیلد اجباری است!"), driverhealthCode: Yup.string() .required("این فیلد اجباری است!") .matches( /^[^*&^%$#@!()|.]*$/, "این فیلد نباید شامل کاراکترهای ویژه باشد!" ), }), }); const formikPayer = useFormik({ initialValues: { mobile: "", weight: "", quantity: "", }, validationSchema: Yup.object({ mobile: Yup.string() .required("شماره موبایل الزامی است") .min(11, "شماره موبایل باید 11 رقم باشد") .max(11, "شماره موبایل باید 11 رقم باشد") .matches(/^09\d{9}$/, "شماره موبایل باید با 09 شروع شود و 11 رقم باشد"), weight: Yup.number(), quantity: Yup.number(), }), }); const formikTransportHealthCode = useFormik({ initialValues: { healthCode: "", }, validationSchema: Yup.object({ healthCode: Yup.string() .required("این فیلد اجباری است!") .matches( /^[^*&^%$#@!()|.]*$/, "این فیلد نباید شامل کاراکترهای ویژه باشد!" ), }), }); const handleAddTransportHealthCode = () => { if (formikTransportHealthCode.values.healthCode.trim()) { setTransportHealthCodes([ ...transportHealthCodes, formikTransportHealthCode.values.healthCode, ]); formikTransportHealthCode.resetForm(); setShowHealthCodeForm(false); } }; const handleRemoveTransportHealthCode = (indexToRemove) => { setTransportHealthCodes( transportHealthCodes.filter((_, index) => index !== indexToRemove) ); }; useEffect(() => { formikPayer.setFieldValue("mobile", poultry?.user?.mobile); }, [poultry]); const penaltyPrice = formik.values.noChicken * 1000; const dialogContent = ( <> اینجانب {poultry?.user?.fullname} موافقت خود را نسبت به موارد ذکر شده اعلام می نمایم. ); useEffect(() => { dispatch(LOADING_START()); dispatch(provinceGetPoultry()).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(); formikDriver.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, poultry]); useEffect(() => { setChickenCanRequest(hatchingSelected?.leftOver); }, [ formik.values.losses, leftOvers, formik.values.noChicken, hatchingSelected, ]); 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, // }); // }; const killerFieldsValidation = () => { if (buyerItem?.type === "killer") { return ( formik.values.killer_kill_house_city && formik.values.killer_kill_house_province && formik.values.killer_kill_house_unit_name ); } else { return true; } }; const wageValidation = () => { if (wageType) { return formikPayer.isValid; } else { return true; } }; const isFormValid = () => { if (payerValue === "poultry") { if (submitDriver) { return ( formik.isValid && wageValidation() && buyerSelected && formikDriver && driverPelak[0] && killerFieldsValidation() ); } else { return ( formik.isValid && wageValidation() && buyerSelected && killerFieldsValidation() ); } } else { if (submitDriver) { return ( formik.isValid && buyerSelected && formikDriver && driverPelak[0] && killerFieldsValidation() && wageValidation() ); } else { return ( formik.isValid && buyerSelected && killerFieldsValidation() && wageValidation() ); } } }; return ( option.disabled} options={ poultryData ? poultryData.map((i) => ({ id: i.key, label: `${i.unitName} / ${ i.user.mobile } / ${i.lastHatchingRemainQuantity.toLocaleString()} `, item: i, disabled: !i.lastHatchingRemainQuantity, })) : [] } onChange={(event, value) => { setHatchingSelected(null); sethatchingKey(null); setSelectedHatchingLabel(null); setPolutryKey(value.id); setPoultry(value.item); }} renderInput={(params) => ( )} /> {/* {!poultry?.provinceAllowSellFree && ( اجازه فروش بصورت خارج از استان ندارید! )} */} {poultry?.provinceAllowSellFree ? ( { return { id: i.key, race: i.chickenBreed, selected: i, label: `دوره ${i.period} سالن ${i.hall} نژاد ${ i.chickenBreed } باقیمانده ${ i?.lastHatchingDiffrentRequestQuantity?.leftOver ? i?.lastHatchingDiffrentRequestQuantity?.leftOver : i.leftOver } قطعه`, }; }) : [] } onChange={(event, value) => { setSelectedHatchingLabel(value.label); sethatchingKey(value.id); setHatchingSelected(value.selected); let race = value.race; if (race.includes("-")) { race = "ترکیبی"; } setChickenBreed(race); }} renderInput={(params) => ( )} /> ) : ( poultry && ( مرغدار اجازه فروش مستقیم ندارد! ) )} {hatchingSelected && ( اطلاعات کشتار {/* {getRoleFromUrl() !== "Poultry" && ( )} */} {/* */} prop.palette.grey["A700"]} variant={"caption"} > باقیمانده: {chickenCanRequest} قطعه 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 } /> {formik.values.weight && ( وزن کل:{" "} {parseInt( parseInt(formik.values.noChicken) * parseFloat(formik.values.weight) ).toLocaleString()}{" "} کیلوگرم )} {/* نحوه فروش */} { 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} بازه زمانی (ساعت) {formik.touched.period1 && Boolean(formik.errors.period1) ? formik.errors.period1 : null} {/* */} ); })} {arr.length > 1 && ( )} {arr.length < 3 && ( افزودن پیشنهاد جدید )} در صورت عدم فروش در بورس، از طریق اتحادیه فروش برود )} اطلاعات خریدار option.disabled} options={ buyersData ? buyersData?.map((i) => ({ id: i.key, label: i.type === "killhouse" ? `کشتارگاه ${i?.unitName} / ${i.mobile} / استان ${i?.province}/ ${i?.city}` : `کشتارکن ${i?.fullname} / ${i.mobile} / استان ${i?.province}/ ${i?.city}`, item: i, mobile: i.mobile, })) : [] } onChange={(event, value) => { setBuyerSelected(value.id); setBuyerItem(value.item); if (payerValue === "buyer") { formikPayer.setFieldValue("mobile", value.mobile); } }} renderInput={(params) => ( )} /> {buyerItem?.type === "killer" && ( )} {buyerItem?.key && ( <> { setSubmitDriver(!submitDriver); }} > {" "} افزودن خودرو {submitDriver ? : } {submitDriver && ( اطلاعات خودرو حمل )} {/* افزودن کد بهداشتی حمل و نقل */} کدهای بهداشتی حمل و نقل {/* Display added health codes */} {transportHealthCodes.length > 0 && ( {transportHealthCodes.map((code, index) => ( handleRemoveTransportHealthCode(index) } aria-label="حذف" > ))} )} {/* Form to add new health code */} {showHealthCodeForm && ( )} {/* Button to show form */} )} {wageType && ( <> } label="مرغدار" sx={{ marginRight: "auto", }} /> } label="خریدار" /> از این قسمت میتوانید تلفن{" "} {payerValue === "poultry" ? "مرغدار" : "خریدار"} را ویرایش کنید. )} {/* نحوه فروش } 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} /> ); })} )} } btnTitle={"با تعهد نامه موافق هستم!"} isAccepted={formik.values.isAccepted} /> )} ); };