1198 lines
42 KiB
JavaScript
1198 lines
42 KiB
JavaScript
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 = (
|
|
<>
|
|
<Typography variant="body1">
|
|
اینجانب {userProfile.fullname} موافقت خود را نسبت به موارد ذکر شده اعلام
|
|
می نمایم.
|
|
</Typography>
|
|
<ListItem>
|
|
<ListItemIcon>
|
|
<DoneIcon />
|
|
</ListItemIcon>
|
|
<ListItemText
|
|
primary={` بر اساس این توافق نامه در صورت لغو فروش ${formik.values.noChicken} قطعه
|
|
مرغ ${penaltyPrice} ریال جریمه خواهم شد.`}
|
|
/>
|
|
</ListItem>
|
|
<Typography></Typography>
|
|
</>
|
|
);
|
|
|
|
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 (
|
|
<Grid container gap={SPACING.SMALL} direction="column" display={"flex"}>
|
|
<Grid container gap={SPACING.SMALL} direction={"column"}>
|
|
<Grid minWidth={210}>
|
|
<Autocomplete
|
|
disablePortal
|
|
id="combo-box-demo"
|
|
options={
|
|
poultryData
|
|
? poultryData.map((i) => ({
|
|
id: i.key,
|
|
label: i.unitName,
|
|
}))
|
|
: []
|
|
}
|
|
onChange={(event, value) => {
|
|
setPolutryKey(value.id);
|
|
}}
|
|
renderInput={(params) => (
|
|
<TextField {...params} label="محل پرورش" />
|
|
)}
|
|
/>
|
|
</Grid>
|
|
|
|
{!poultryData[0]?.provinceAllowSellFree && (
|
|
<Typography>اجازه فروش خارج از استان ندارید!</Typography>
|
|
)}
|
|
|
|
{poultryData[0]?.provinceAllowSellFree && (
|
|
<Grid container direction="column" gap={SPACING.SMALL} width="100%">
|
|
<Grid minWidth={210}>
|
|
<Autocomplete
|
|
disablePortal
|
|
id="hatching"
|
|
options={
|
|
hatchingData
|
|
? hatchingData.map((i) => {
|
|
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) => (
|
|
<TextField {...params} label="دوره جوجه ریزی" />
|
|
)}
|
|
/>
|
|
</Grid>
|
|
<Grid>
|
|
<TextField
|
|
disabled
|
|
fullWidth
|
|
id="outlined-read-only-input"
|
|
label="تعداد جوجه ریزی"
|
|
value={quantity ? quantity : "نامشخص"}
|
|
InputProps={{
|
|
readOnly: true,
|
|
}}
|
|
/>
|
|
</Grid>
|
|
<Grid>
|
|
<TextField
|
|
disabled
|
|
fullWidth
|
|
id="outlined-read-only-input"
|
|
label="جمع تلفات ثبت شده دامپزشک و مرغدار"
|
|
value={losses ? losses : "نامشخص"}
|
|
InputProps={{
|
|
readOnly: true,
|
|
}}
|
|
/>
|
|
</Grid>
|
|
<Grid>
|
|
<TextField
|
|
disabled
|
|
fullWidth
|
|
id="outlined-read-only-input"
|
|
label="باقیمانده"
|
|
value={leftOvers ? leftOvers : "نامشخص"}
|
|
InputProps={{
|
|
readOnly: true,
|
|
}}
|
|
/>
|
|
</Grid>
|
|
</Grid>
|
|
)}
|
|
</Grid>
|
|
|
|
{hatchingSelected && (
|
|
<Grid container gap={SPACING.SMALL} direction={"column"}>
|
|
<Typography>اطلاعات کشتار</Typography>
|
|
{getRoleFromUrl() !== "Poultry" && (
|
|
<Grid>
|
|
<Grid>
|
|
<NumberInput
|
|
allowLeadingZeros
|
|
thousandSeparator=","
|
|
fullWidth
|
|
id="losses"
|
|
label="تلفات"
|
|
variant="outlined"
|
|
value={formik.values.losses}
|
|
error={
|
|
formik.touched.losses ? Boolean(formik.errors.losses) : null
|
|
}
|
|
onChange={formik.handleChange}
|
|
onBlur={formik.handleBlur}
|
|
helperText={
|
|
formik.touched.losses && Boolean(formik.errors.losses)
|
|
? formik.errors.losses
|
|
: null
|
|
}
|
|
/>
|
|
</Grid>
|
|
</Grid>
|
|
)}
|
|
<Grid>
|
|
{/* <NumericFormat
|
|
customInput={TextField}
|
|
allowLeadingZeros
|
|
thousandSeparator=","
|
|
fullWidth
|
|
id="noChicken"
|
|
label="تعداد مرغ برای کشتار"
|
|
// InputProps={{
|
|
// inputComponent: NumberFormatCustom,
|
|
// }}
|
|
variant="outlined"
|
|
value={formik.values.noChicken}
|
|
error={
|
|
formik.touched.noChicken
|
|
? Boolean(formik.errors.noChicken)
|
|
: null
|
|
}
|
|
onChange={formik.handleChange}
|
|
onBlur={formik.handleBlur}
|
|
helperText={
|
|
formik.touched.noChicken && Boolean(formik.errors.noChicken)
|
|
? formik.errors.noChicken
|
|
: null
|
|
}
|
|
/> */}
|
|
<NumberInput
|
|
allowLeadingZeros
|
|
thousandSeparator=","
|
|
fullWidth
|
|
id="noChicken"
|
|
label="تعداد مرغ برای کشتار"
|
|
// InputProps={{
|
|
// inputComponent: NumberFormatCustom,
|
|
// }}
|
|
variant="outlined"
|
|
value={formik.values.noChicken}
|
|
error={
|
|
formik.touched.noChicken
|
|
? Boolean(formik.errors.noChicken)
|
|
: null
|
|
}
|
|
onChange={formik.handleChange}
|
|
onBlur={formik.handleBlur}
|
|
helperText={
|
|
formik.touched.noChicken && Boolean(formik.errors.noChicken)
|
|
? formik.errors.noChicken
|
|
: null
|
|
}
|
|
/>
|
|
</Grid>
|
|
|
|
<Grid
|
|
container
|
|
gap={SPACING.TINY}
|
|
justifyContent="space-evenly"
|
|
alignItems={"start"}
|
|
>
|
|
<Grid container gap={SPACING.TINY}>
|
|
<Typography
|
|
color={(prop) => prop.palette.grey["A700"]}
|
|
variant={"caption"}
|
|
>
|
|
باقیمانده:
|
|
</Typography>
|
|
<Typography variant={"button"}>
|
|
{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)}
|
|
</Typography>
|
|
|
|
<Typography variant={"button"}>قطعه</Typography>
|
|
</Grid>
|
|
<Grid container>
|
|
<Grid container gap={SPACING.TINY} alignItems={"center"}>
|
|
<Typography
|
|
color={(prop) => prop.palette.grey["A700"]}
|
|
variant={"caption"}
|
|
>
|
|
سن مرغ:
|
|
</Typography>
|
|
<Typography variant={"button"}>
|
|
{hatchingSelected.age}
|
|
</Typography>
|
|
<Typography variant={"button"}>روزه</Typography>
|
|
</Grid>
|
|
</Grid>
|
|
</Grid>
|
|
|
|
<Grid>
|
|
<DatePicker
|
|
label="تاریخ کشتار"
|
|
id="slaughterDate"
|
|
renderInput={(params) => <TextField {...params} />}
|
|
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
|
|
}
|
|
/>
|
|
</Grid>
|
|
<Grid>
|
|
<TextField
|
|
id="weight"
|
|
label="وزن تقریبی مرغ"
|
|
variant="outlined"
|
|
InputProps={{
|
|
endAdornment: (
|
|
<InputAdornment position="end">کیلوگرم</InputAdornment>
|
|
),
|
|
}}
|
|
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
|
|
}
|
|
/>
|
|
</Grid>
|
|
|
|
{/* <Grid>
|
|
<Typography>نحوه فروش</Typography>
|
|
</Grid> */}
|
|
<Grid display="none">
|
|
<FormControl>
|
|
<RadioGroup
|
|
aria-labelledby="demo-radio-buttons-group-label"
|
|
defaultValue="فروش اتحادیه"
|
|
name="radio-buttons-group"
|
|
onChange={(event) => {
|
|
setIsStockMarket(event.currentTarget.value);
|
|
}}
|
|
>
|
|
{/* <FormControlLabel
|
|
value="فروش اتحادیه"
|
|
control={<Radio />}
|
|
label="فروش اتحادیه"
|
|
/> */}
|
|
{/* <FormControlLabel
|
|
value="فروش مزایده ای"
|
|
control={
|
|
<Radio id="isStockMarket" onChange={formik.handleChange} />
|
|
}
|
|
label="فروش مزایده ای"
|
|
/> */}
|
|
{isStockMarket === "فروش مزایده ای" && (
|
|
<Grid container gap={SPACING.SMALL}>
|
|
<Grid container gap={SPACING.SMALL} alignItems={"center"}>
|
|
<Typography
|
|
color={(prop) => prop.palette.grey["A700"]}
|
|
variant={"caption"}
|
|
>
|
|
کف قیمت امروز:
|
|
</Typography>
|
|
<Typography color="secondary" variant={"button"}>
|
|
{avicultureChickenPrice?.floorPrice
|
|
? avicultureChickenPrice?.floorPrice.toLocaleString()
|
|
: "نامشخص"}{" "}
|
|
{" "}
|
|
ریال
|
|
</Typography>
|
|
</Grid>
|
|
<Grid container gap={SPACING.SMALL} alignItems={"center"}>
|
|
<Typography
|
|
color={(prop) => prop.palette.grey["A700"]}
|
|
variant={"caption"}
|
|
>
|
|
سقف قیمت امروز:
|
|
</Typography>
|
|
<Typography color="secondary" variant={"button"}>
|
|
{avicultureChickenPrice?.ceilingPrice
|
|
? avicultureChickenPrice?.ceilingPrice.toLocaleString()
|
|
: "نامشخص"}{" "}
|
|
{" "}
|
|
ریال
|
|
</Typography>
|
|
</Grid>
|
|
|
|
<Divider style={{ width: "100%" }} />
|
|
|
|
{arr.map((item, i) => {
|
|
return (
|
|
<Grid
|
|
gap={SPACING.SMALL}
|
|
container
|
|
key={item?.id}
|
|
sx={{ minWidth: 210 }}
|
|
>
|
|
<Typography mb={SPACING.SMALL} display="flex">
|
|
پیشنهاد {i + 1}
|
|
</Typography>
|
|
|
|
<NumberInput
|
|
allowLeadingZeros
|
|
thousandSeparator=","
|
|
error={false}
|
|
fullWidth
|
|
label="قیمت پیشنهادی"
|
|
variant="outlined"
|
|
onChange={handleChange}
|
|
id={i}
|
|
/>
|
|
|
|
<FormControl fullWidth>
|
|
<InputLabel id="demo-simple-select-label">
|
|
بازه زمانی (ساعت)
|
|
</InputLabel>
|
|
<Select
|
|
id={i}
|
|
labelId="demo-simple-select-label"
|
|
label="بازه زمانی (ساعت)"
|
|
>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"1"}
|
|
>
|
|
1
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"2"}
|
|
>
|
|
2
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"3"}
|
|
>
|
|
3
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"4"}
|
|
>
|
|
4
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"5"}
|
|
>
|
|
5
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"6"}
|
|
>
|
|
6
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"7"}
|
|
>
|
|
7
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"8"}
|
|
>
|
|
8
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"9"}
|
|
>
|
|
9
|
|
</MenuItem>
|
|
<MenuItem
|
|
onClick={handleChangeTime}
|
|
id={i}
|
|
value={"10"}
|
|
>
|
|
10
|
|
</MenuItem>
|
|
</Select>
|
|
<FormHelperText>
|
|
{formik.touched.period1 &&
|
|
Boolean(formik.errors.period1)
|
|
? formik.errors.period1
|
|
: null}
|
|
</FormHelperText>
|
|
</FormControl>
|
|
{/* <input
|
|
key={i}
|
|
onChange={handleChange}
|
|
value={item.value}
|
|
id={i}
|
|
type={item.type}
|
|
/> */}
|
|
</Grid>
|
|
);
|
|
})}
|
|
|
|
<Grid container>
|
|
{arr.length > 1 && (
|
|
<IconButton
|
|
onClick={removeInput}
|
|
aria-label="delete"
|
|
color="secondary"
|
|
>
|
|
<DeleteIcon />
|
|
</IconButton>
|
|
)}
|
|
{arr.length < 3 && (
|
|
<IconButton
|
|
xs={12}
|
|
onClick={addInput}
|
|
aria-label="add"
|
|
color="primary"
|
|
>
|
|
<AddIcon />
|
|
<Typography>افزودن پیشنهاد جدید</Typography>
|
|
</IconButton>
|
|
)}
|
|
</Grid>
|
|
|
|
<Grid container sx={{ width: "100%" }}>
|
|
<Typography variant="body2">
|
|
در صورت عدم فروش در بورس، از طریق اتحادیه فروش برود
|
|
<Checkbox id="isUnion" onChange={formik.handleChange} />
|
|
</Typography>
|
|
</Grid>
|
|
</Grid>
|
|
)}
|
|
</RadioGroup>
|
|
</FormControl>
|
|
</Grid>
|
|
<Typography variant="body1">اطلاعات خریدار</Typography>
|
|
<TextField
|
|
label="نام"
|
|
name="name"
|
|
value={formik.values.name}
|
|
onChange={formik.handleChange}
|
|
error={formik.touched.name && Boolean(formik.errors.name)}
|
|
helperText={formik.touched.name && formik.errors.name}
|
|
required
|
|
fullWidth
|
|
/>
|
|
<TextField
|
|
label="نام خانوادگی"
|
|
name="lastname"
|
|
value={formik.values.lastname}
|
|
onChange={formik.handleChange}
|
|
error={formik.touched.lastname && Boolean(formik.errors.lastname)}
|
|
helperText={formik.touched.lastname && formik.errors.lastname}
|
|
required
|
|
fullWidth
|
|
/>
|
|
<TextField
|
|
label="موبایل"
|
|
name="mobile"
|
|
value={formik.values.mobile}
|
|
onChange={formik.handleChange}
|
|
error={formik.touched.mobile && Boolean(formik.errors.mobile)}
|
|
helperText={formik.touched.mobile && formik.errors.mobile}
|
|
type="tel"
|
|
required
|
|
fullWidth
|
|
/>
|
|
<TextField
|
|
label="استان"
|
|
name="province"
|
|
value={formik.values.province}
|
|
onChange={formik.handleChange}
|
|
error={formik.touched.province && Boolean(formik.errors.province)}
|
|
helperText={formik.touched.province && formik.errors.province}
|
|
required
|
|
fullWidth
|
|
/>
|
|
<TextField
|
|
label="شهرستان"
|
|
name="city"
|
|
value={formik.values.city}
|
|
onChange={formik.handleChange}
|
|
error={formik.touched.city && Boolean(formik.errors.city)}
|
|
helperText={formik.touched.city && formik.errors.city}
|
|
required
|
|
fullWidth
|
|
/>
|
|
<FormControl component="fieldset" margin="normal" required>
|
|
<FormLabel component="legend">نوع خریدار</FormLabel>
|
|
<RadioGroup
|
|
name="buyerType"
|
|
value={formik.values.buyerType}
|
|
onChange={formik.handleChange}
|
|
>
|
|
<FormControlLabel
|
|
value="killhouse"
|
|
control={<Radio />}
|
|
label="کشتارگاه"
|
|
/>
|
|
<FormControlLabel
|
|
value="killer"
|
|
control={<Radio />}
|
|
label="کشتارکن"
|
|
/>
|
|
<FormControlLabel
|
|
value="freezing"
|
|
control={<Radio />}
|
|
label="انجماد"
|
|
/>
|
|
</RadioGroup>
|
|
{formik.touched.buyerType && formik.errors.buyerType ? (
|
|
<div style={{ color: "red" }}>{formik.errors.buyerType}</div>
|
|
) : null}
|
|
</FormControl>
|
|
|
|
{/* <Grid>
|
|
<Grid mb={SPACING.TINY}>
|
|
<Typography varaint="body1">نحوه فروش</Typography>
|
|
</Grid>
|
|
<FormGroup>
|
|
<FormControlLabel
|
|
control={
|
|
<Checkbox
|
|
onChange={handleSellTypeChange}
|
|
name="cash"
|
|
value="نقدی"
|
|
/>
|
|
}
|
|
label="نقدی"
|
|
/>
|
|
<FormControlLabel
|
|
control={
|
|
<Checkbox
|
|
onChange={handleSellTypeChange}
|
|
name="haveTime"
|
|
value="زمان دار"
|
|
/>
|
|
}
|
|
label="زمان دار (تا یک ماه)"
|
|
/>
|
|
</FormGroup>
|
|
<FormHelperText>
|
|
{formik.touched.sellType && Boolean(formik.errors.sellType)
|
|
? formik.errors.sellType
|
|
: null}
|
|
</FormHelperText>
|
|
</Grid> */}
|
|
|
|
{unions?.length > 1 && (
|
|
<>
|
|
<Divider />
|
|
<Grid>
|
|
<FormControl>
|
|
<FormLabel id="demo-radio-buttons-group-label">
|
|
انتخاب اتحادیه
|
|
</FormLabel>
|
|
<RadioGroup
|
|
aria-labelledby="demo-radio-buttons-group-label"
|
|
defaultValue={unions[0]?.key}
|
|
name="radio-buttons-group"
|
|
onChange={(event) => {
|
|
setUnionSelected(event.currentTarget.value);
|
|
}}
|
|
>
|
|
{unions.map((item) => {
|
|
return (
|
|
<>
|
|
<FormControlLabel
|
|
value={item.key}
|
|
control={<Radio />}
|
|
label={item.unitName}
|
|
/>
|
|
</>
|
|
);
|
|
})}
|
|
</RadioGroup>
|
|
</FormControl>
|
|
</Grid>
|
|
</>
|
|
)}
|
|
<Grid>
|
|
<DialogAlert
|
|
title="تعهد نامه"
|
|
content={dialogContent}
|
|
actions={
|
|
<Grid container gap={SPACING.TINY}>
|
|
<Button
|
|
variant="outlined"
|
|
color="error"
|
|
onClick={() => {
|
|
formik.setFieldValue("isAccepted", false);
|
|
}}
|
|
>
|
|
رد
|
|
</Button>
|
|
<Button
|
|
variant="contained"
|
|
color="success"
|
|
onClick={() => {
|
|
formik.setFieldValue("isAccepted", true);
|
|
}}
|
|
>
|
|
موافقم
|
|
</Button>
|
|
</Grid>
|
|
}
|
|
btnTitle={"با تعهد نامه موافق هستم!"}
|
|
isAccepted={formik.values.isAccepted}
|
|
/>
|
|
</Grid>
|
|
<Grid mb={SPACING.SMALL}>
|
|
<Button
|
|
fullWidth
|
|
disabled={!formik.isValid}
|
|
onClick={() => {
|
|
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"
|
|
>
|
|
ثبت درخواست
|
|
</Button>
|
|
</Grid>
|
|
</Grid>
|
|
)}
|
|
</Grid>
|
|
);
|
|
};
|