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 && (
}
fullWidth
sx={{
fontSize: "12px",
}}
>
افزودن
)}
{/* 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}
/>
)}
);
};