develop => add buyer discovered all types of user

This commit is contained in:
2026-02-01 10:45:12 +03:30
parent 2705e226e1
commit 331fb98625
4 changed files with 826 additions and 24 deletions

View File

@@ -0,0 +1,701 @@
import { useContext, useEffect, useState } from "react";
import { AppContext } from "../../../../contexts/AppContext";
import { useDispatch } from "react-redux";
import { useFormik } from "formik";
import { Yup } from "../../../../lib/yup/yup";
import { Grid } from "../../../../components/grid/Grid";
import {
Autocomplete,
FormControl,
FormControlLabel,
IconButton,
InputLabel,
MenuItem,
Radio,
RadioGroup,
Select,
TextField,
Typography,
} from "@mui/material";
import { SPACING } from "../../../../data/spacing";
import SearchIcon from "@mui/icons-material/Search";
import { extractProvinceFromAddress } from "../../../../utils/address";
import { provinceGetNationalDocumentsService } from "../../../province/services/province-get-national-documents";
import {
slaughterEditBuyerDataService,
slaughterSubmitBuyerDataService,
} from "../../../slaughter-house/services/slaughter-house-submit-buyer";
import { LabelField } from "../../../../components/label-field/LabelField";
export const validationSchemaForAdminAddBuyer = (isEdit, isRealPerson) =>
Yup.object({
mobile: Yup.string()
.required("این فیلد اجباری است!")
.min(11, "شماره موبایل باید 11 رقم باشد")
.max(11, "شماره موبایل باید 11 رقم باشد")
.matches(/^09\d{9}$/, "شماره موبایل باید با 09 شروع شود و 11 رقم باشد"),
firstName: Yup.string()
.required("این فیلد اجباری است!")
.typeError("لطفا فیلد را به درستی وارد کنید!"),
lastName: Yup.string()
.required("این فیلد اجباری است!")
.typeError("لطفا فیلد را به درستی وارد کنید!"),
unit_name: Yup.string()
.required("این فیلد اجباری است!")
.typeError("لطفا فیلد را به درستی وارد کنید!"),
province: Yup.string()
.required("این فیلد اجباری است!")
.typeError("لطفا فیلد را به درستی وارد کنید!"),
city: Yup.string()
.required("این فیلد اجباری است!")
.typeError("لطفا فیلد را به درستی وارد کنید!"),
nationalId:
!isRealPerson && isEdit
? Yup.string().nullable()
: Yup.string()
.required("این فیلد اجباری است!")
.matches(/^\d{10,11}$/, "شناسه باید 10 یا 11 رقم و فقط عدد باشد"),
role_key: Yup.string().required("این فیلد اجباری است!"),
type: Yup.string().oneOf(["Steward", "KillHouse"]).required(),
});
export const handleSubmitForAdminAddBuyer = (
formik,
dispatch,
isEdit,
tableData,
updateTable,
openNotif,
DRAWER,
isRealPerson,
buyerType
) => {
if (isEdit) {
const submitData = {
buyer_type: buyerType,
buyer_key: tableData?.key,
mobile: formik.values.mobile,
first_name: formik.values.firstName,
last_name: formik.values.lastName,
city: formik.values.city,
province: formik.values.province,
national_id: formik.values.nationalId,
unit_name: formik.values.unit_name,
type: formik.values.type,
role_key: formik.values.role_key,
};
dispatch(slaughterEditBuyerDataService(submitData)).then((r) => {
updateTable();
if (r.payload.error) {
openNotif({
vertical: "top",
horizontal: "center",
msg: r.payload.error,
severity: "error",
});
} else {
dispatch(DRAWER({ right: false, bottom: false, content: null }));
openNotif({
vertical: "top",
horizontal: "center",
msg: "عملیات با موفقیت انجام شد.",
severity: "success",
});
}
});
} else {
const submitData = {
mobile: formik.values.mobile,
buyer_type: buyerType,
first_name: formik.values.firstName,
last_name: formik.values.lastName,
city: formik.values.city,
province: formik.values.province,
unit_name: formik.values.unit_name,
national_id: !isRealPerson ? null : formik.values.nationalId,
type: formik.values.type,
role_key: formik.values.role_key,
...(!isRealPerson && {
isRealPerson: false,
info_value: formik.values.nationalId,
}),
};
// if (IS_STEWARD) {
// submitData.name = formik.values.unitName;
// delete submitData.unit_name;
// }
dispatch(slaughterSubmitBuyerDataService(submitData)).then((r) => {
updateTable();
if (r.payload.error) {
openNotif({
vertical: "top",
horizontal: "center",
msg: r.payload.error,
severity: "error",
});
} else {
dispatch(DRAWER({ right: false, bottom: false, content: null }));
openNotif({
vertical: "top",
horizontal: "center",
msg: "عملیات با موفقیت انجام شد.",
severity: "success",
});
}
});
}
};
export const handleSetFormDataFromTableDataForAdminAddBuyer = (
tableData,
formik
) => {
const formData = {
mobile: tableData.mobile || "",
firstName: tableData.firstName || "",
lastName: tableData.lastName || "",
province: tableData.province || "",
city: tableData.city || "",
nationalId: tableData.nationalId || "",
unit_name: tableData?.unitName || "",
type: formik.values?.type,
role_key: formik.values?.role_key,
};
formik.setValues(formData);
setTimeout(() => {
formik.validateForm();
}, 1);
};
export const handleSetFormDataFromUserDataForAdminAddBuyer = (
userData,
formik
) => {
if (userData) {
const formData = {
mobile: userData.mobile || "",
firstName: userData.firstName || "",
lastName: userData.lastName || "",
province: userData.province || "",
city: userData.city || "",
nationalId: userData.nationalId || "",
unit_name: userData?.unitName || "",
type: formik.values?.type,
role_key: formik.values?.role_key,
};
formik.setValues(formData);
setTimeout(() => {
formik.validateForm();
}, 1);
}
};
export const InquiryForAdminAddBuyer = ({
notFound,
setNotFound,
setUserData,
formik,
isEdit,
isRealPerson,
provinceData,
}) => {
const [inquiryInProgress, setInquiryInProgress] = useState(false);
const [openNotif] = useContext(AppContext);
const dispatch = useDispatch();
const formik2 = useFormik({
initialValues: {
personType: isRealPerson ? "real" : "legal", // real | legal
nationalCode: "",
},
validationSchema: Yup.object({
nationalCode:
isEdit && isRealPerson
? Yup.string().nullable()
: Yup.string()
.required("این فیلد اجباری است!")
.when("personType", {
is: "real",
then: (schema) =>
schema
.length(10, "کد ملی باید 10 رقم باشد")
.matches(/^\d{10}$/, "کد ملی باید فقط شامل اعداد باشد"),
otherwise: (schema) =>
schema
.length(11, "شناسه ملی حقوقی باید 11 رقم باشد")
.matches(
/^\d{11}$/,
"شناسه ملی حقوقی باید فقط شامل اعداد باشد"
),
}),
}),
validateOnMount: isEdit ? false : true,
});
const handleInquiry = async () => {
if (!formik2.isValid || inquiryInProgress) {
return;
}
const nationalCode = formik2.values.nationalCode;
const personType = formik2.values.personType;
setInquiryInProgress(true);
setNotFound(false);
setUserData(null);
let personData = null;
let selectedGuild = null;
try {
if (personType === "legal") {
const url = `https://pay.rasadyar.com/national-documents?info=${encodeURIComponent(
nationalCode
)}&type=unit`;
const res = await fetch(url);
const json = await res.json();
if (json?.status && json?.data) {
const d = json.data;
const extractedProvince = extractProvinceFromAddress(
d.address || "",
provinceData
);
const aggregatedUserData = {
mobile: d.mobile,
firstName: d.name || "",
lastName: d.name || "",
unitName: d.unitName || "",
province: d.state || extractedProvince || "",
city: d.city || "",
nationalId: d.nationalCode || nationalCode,
type: formik.values?.type,
role_key: formik.values?.role_key,
};
handleSetFormDataFromUserDataForAdminAddBuyer(
aggregatedUserData,
formik
);
formik2.setFieldValue(
"nationalCode",
aggregatedUserData.nationalId || nationalCode
);
openNotif({
vertical: "top",
horizontal: "center",
msg: "اطلاعات حقوقی با موفقیت دریافت شد.",
severity: "success",
});
} else {
setNotFound(true);
formik.setFieldValue("nationalId", nationalCode);
openNotif({
vertical: "top",
horizontal: "center",
msg: "اطلاعات حقوقی برای این شناسه یافت نشد، لطفا اطلاعات را به صورت دستی ثبت کنید.",
severity: "warning",
});
}
return;
}
const personResponse = await dispatch(
provinceGetNationalDocumentsService({
info: nationalCode,
type: "person",
})
);
if (personResponse.payload?.error) {
openNotif({
vertical: "top",
horizontal: "center",
msg: personResponse.payload.error,
severity: "error",
});
} else if (
personResponse.payload?.data?.status &&
personResponse.payload?.data?.data
) {
personData = personResponse.payload.data.data;
} else {
openNotif({
vertical: "top",
horizontal: "center",
msg: "اطلاعات فردی یافت نشد.",
severity: "warning",
});
}
const guildResponse = await dispatch(
provinceGetNationalDocumentsService({
info: nationalCode,
type: "guild",
})
);
if (guildResponse.payload?.error) {
openNotif({
vertical: "top",
horizontal: "center",
msg: guildResponse.payload.error,
severity: "error",
});
} else if (
guildResponse.payload?.data?.status &&
guildResponse.payload?.data?.data
) {
const guildData = guildResponse.payload.data.data;
const guildArray = Array.isArray(guildData) ? guildData : [guildData];
if (guildArray.length > 0) {
const activeGuildIndex = guildArray.findIndex(
(g) => g.licenseStatus === "فعال/صادر شده"
);
selectedGuild =
guildArray[activeGuildIndex !== -1 ? activeGuildIndex : 0];
} else {
openNotif({
vertical: "top",
horizontal: "center",
msg: "اطلاعات صنفی برای این کد ملی یافت نشد.",
severity: "warning",
});
}
} else {
openNotif({
vertical: "top",
horizontal: "center",
msg: "اطلاعات صنفی برای این کد ملی یافت نشد.",
severity: "warning",
});
}
if (!personData && !selectedGuild) {
setNotFound(true);
formik.setFieldValue("nationalId", nationalCode);
openNotif({
vertical: "top",
horizontal: "center",
msg: "اطلاعاتی برای این کد ملی یافت نشد، لطفا اطلاعات را به صورت دستی ثبت کنید.",
severity: "warning",
});
return;
}
const layerTwo = selectedGuild?.layerTwo || {};
const aggregatedUserData = {
mobile:
layerTwo.mobilenumber ||
personData?.mobile ||
layerTwo.phonenumber ||
"",
firstName: personData?.firstName || "",
lastName: personData?.lastName || "",
unitName:
selectedGuild?.title ||
layerTwo.corporationName ||
layerTwo.unionName ||
"",
province: selectedGuild?.state || "",
city: selectedGuild?.city || "",
nationalId:
personData?.nationalId ||
layerTwo.nationalcode ||
selectedGuild?.nationalId ||
nationalCode,
type: formik.values?.type,
role_key: formik.values?.role_key,
};
setUserData(aggregatedUserData);
handleSetFormDataFromUserDataForAdminAddBuyer(aggregatedUserData, formik);
formik2.setFieldValue(
"nationalCode",
aggregatedUserData.nationalId || nationalCode
);
openNotif({
vertical: "top",
horizontal: "center",
msg: "اطلاعات با موفقیت دریافت شد.",
severity: "success",
});
} finally {
setInquiryInProgress(false);
}
};
useEffect(() => {
if (notFound) {
formik.setFieldValue("mobile", formik2.values.mobile);
}
}, [notFound]);
return (
<Grid container xs={12}>
<Typography mt={2}>
{"استعلام "}
{!isRealPerson ? "شناسه ملی حقوقی" : "کد ملی"}
</Typography>
<Grid mt={SPACING.SMALL} display="flex" width={1}>
<TextField
fullWidth
id="nationalCode"
name="nationalCode"
label={!isRealPerson ? "شناسه ملی حقوقی" : "کد ملی"}
variant="outlined"
value={formik2.values.nationalCode}
error={Boolean(
formik2.touched.nationalCode && formik2.errors.nationalCode
)}
onChange={formik2.handleChange}
onBlur={formik2.handleBlur}
helperText={
formik2.touched.nationalCode && formik2.errors.nationalCode
}
inputProps={{
maxLength: !isRealPerson ? 11 : 10,
}}
/>
<IconButton
disabled={!formik2.isValid || inquiryInProgress}
aria-label="search"
color="primary"
onClick={handleInquiry}
>
<SearchIcon />
</IconButton>
</Grid>
</Grid>
);
};
export const AdminAddBuyerForm = ({
formik,
provinceData,
cityData,
notFound,
isRealPerson,
killHouses,
stewards,
}) => {
return (
<Grid
container
justifyContent="space-between"
alignItems="start"
xs={12}
direction="column"
gap={2}
>
<TextField
fullWidth
id="nationalId"
name="nationalId"
label={!isRealPerson ? "شناسه ملی حقوقی" : "کد ملی"}
disabled={true}
variant="outlined"
value={formik.values.nationalId}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
helperText={formik.touched.nationalId && formik.errors.nationalId}
/>
<LabelField label="انتخاب نوع واحد">
<RadioGroup
row
name="type"
value={formik.values.type}
onChange={(e) => {
const value = e.target.value;
formik.setFieldValue("type", value);
}}
>
<FormControlLabel value="Steward" control={<Radio />} label="مباشر" />
<FormControlLabel
value="KillHouse"
control={<Radio />}
label="کشتارگاه"
/>
</RadioGroup>
</LabelField>
{formik.values.type === "Steward" ? (
<Autocomplete
fullWidth
disablePortal
id="role_key"
options={stewards.map((item) => {
return {
key: item?.key,
label: `${item?.name || ""} - ${item?.user?.fullname || ""} (${
item?.user?.mobile || ""
})`,
};
})}
onChange={(event, value) => {
formik.setFieldValue("role_key", value?.key || "");
}}
value={
formik.values.role_key
? {
key: formik.values.role_key,
label:
stewards.find((item) => item.key === formik.values.role_key)
?.name || "",
}
: null
}
isOptionEqualToValue={(option, value) => option.key === value.key}
label="انتخاب مباشر"
renderInput={(params) => (
<TextField fullWidth {...params} label={"انتخاب مباشر"} />
)}
/>
) : formik.values.type === "KillHouse" ? (
<FormControl
fullWidth
error={formik.errors.selectedOption && formik.touched.selectedOption}
>
<InputLabel>انتخاب کشتارگاه یا کشتارکن</InputLabel>
<Select
label="انتخاب کشتارگاه یا کشتارکن"
id="role_key"
name="role_key"
// value={formik.values.role_key}
onChange={(e) => {
const [key] = e.target.value.split("#");
formik.setFieldValue("role_key", key);
}}
onBlur={formik.handleBlur}
>
{killHouses?.map((option) => (
<MenuItem
key={option}
value={`${option.key + "#" + option.killer}`}
>
{option.killer
? `کشتارکن ${option.name}`
: `کشتارگاه ${option.name}`}
</MenuItem>
))}
</Select>
{formik.errors.role_key && formik.touched.role_key && (
<div>{formik.errors.role_key}</div>
)}
</FormControl>
) : null}
<TextField
fullWidth
id="mobile"
label="شماره موبایل"
variant="outlined"
value={formik.values.mobile}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
error={Boolean(formik.errors.mobile)}
helperText={formik.errors.mobile}
/>
<TextField
fullWidth
id="firstName"
label="نام"
variant="outlined"
value={formik.values.firstName}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
helperText={formik.touched.firstName && formik.errors.firstName}
error={Boolean(formik.errors.firstName)}
/>
<TextField
fullWidth
id="lastName"
label="نام خانوادگی"
variant="outlined"
value={formik.values.lastName}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
helperText={formik.touched.lastName && formik.errors.lastName}
error={Boolean(formik.errors.lastName)}
/>
<TextField
fullWidth
id="unit_name"
label="نام واحد"
variant="outlined"
value={formik.values.unit_name}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
helperText={formik.touched.unit_name && formik.errors.unit_name}
error={Boolean(formik.errors.unit_name)}
/>
<Autocomplete
style={{ width: "100%" }}
disablePortal
id="province"
options={
provinceData
? provinceData.map((i) => ({ id: i.name, label: i.name }))
: []
}
isOptionEqualToValue={(option, value) => option.id === value.id}
onChange={(e, value) => {
formik.setFieldValue("province", value ? value.id : "");
formik.setFieldValue("city", "");
}}
value={
formik.values.province
? {
id: formik.values.province,
label: formik.values.province,
}
: null
}
renderInput={(params) => (
<TextField {...params} label="استان را انتخاب کنید" />
)}
/>
{!notFound && (
<Typography variant="caption" color="error">
استان: {formik.values.province}
</Typography>
)}
{cityData && formik.values.province && (
<>
<Autocomplete
minWidth={210}
style={{ width: "100%" }}
disablePortal
id="city"
options={
cityData
? cityData.map((i) => ({ id: i.name, label: i.name }))
: []
}
isOptionEqualToValue={(option, value) => option.id === value.id}
onChange={(e, value) => {
formik.setFieldValue("city", value ? value.id : "");
}}
value={cityData.find((i) => i.name === formik.values.city)?.name}
renderInput={(params) => (
<TextField {...params} label="شهر را انتخاب کنید" />
)}
/>
{!notFound && (
<Typography variant="caption" color="error">
شهر: {formik.values.city}
</Typography>
)}
</>
)}
</Grid>
);
};

View File

@@ -13,6 +13,7 @@ import {
slaughterEditBuyerDataService, slaughterEditBuyerDataService,
slaughterSubmitBuyerDataService, slaughterSubmitBuyerDataService,
} from "../../../slaughter-house/services/slaughter-house-submit-buyer"; } from "../../../slaughter-house/services/slaughter-house-submit-buyer";
import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl";
export const validationSchemaForSlaughterAddBuyer = (isEdit, isRealPerson) => export const validationSchemaForSlaughterAddBuyer = (isEdit, isRealPerson) =>
Yup.object({ Yup.object({
@@ -68,6 +69,7 @@ export const handleSubmitForSlaughterAddBuyer = (
role_key: selectedSubUser?.key || "", role_key: selectedSubUser?.key || "",
buyer_type: tableData?.buyerType, buyer_type: tableData?.buyerType,
buyer_key: tableData?.key, buyer_key: tableData?.key,
role: getRoleFromUrl(),
}; };
dispatch(slaughterEditBuyerDataService(submitData)).then((r) => { dispatch(slaughterEditBuyerDataService(submitData)).then((r) => {
@@ -92,6 +94,7 @@ export const handleSubmitForSlaughterAddBuyer = (
}); });
} else { } else {
const submitData = { const submitData = {
role: getRoleFromUrl(),
mobile: formik.values.mobile, mobile: formik.values.mobile,
first_name: formik.values.firstName, first_name: formik.values.firstName,
last_name: formik.values.lastName, last_name: formik.values.lastName,
@@ -158,7 +161,7 @@ export const handleSetFormDataFromTableDataForSlaughterAddBuyer = (
}, 1); }, 1);
}; };
export const handleSetFormDataFromUserDataForStewardAddBuyer = ( export const handleSetFormDataFromUserDataForSlaughterAddBuyer = (
userData, userData,
formik formik
) => { ) => {
@@ -263,7 +266,7 @@ export const InquiryForSlaughterAddBuyer = ({
nationalId: d.nationalCode || nationalCode, nationalId: d.nationalCode || nationalCode,
}; };
setUserData(aggregatedUserData); setUserData(aggregatedUserData);
handleSetFormDataFromUserDataForStewardAddBuyer( handleSetFormDataFromUserDataForSlaughterAddBuyer(
aggregatedUserData, aggregatedUserData,
formik formik
); );
@@ -392,7 +395,7 @@ export const InquiryForSlaughterAddBuyer = ({
nationalCode, nationalCode,
}; };
setUserData(aggregatedUserData); setUserData(aggregatedUserData);
handleSetFormDataFromUserDataForStewardAddBuyer( handleSetFormDataFromUserDataForSlaughterAddBuyer(
aggregatedUserData, aggregatedUserData,
formik formik
); );

View File

@@ -8,6 +8,10 @@ import { DRAWER } from "../../../../lib/redux/slices/appSlice";
import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl"; import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl";
import { useLocation } from "react-router-dom"; import { useLocation } from "react-router-dom";
import { import {
ROUTE_ADMINX_ROUTE_MANAGE_STEWARDS_OUT_PROVINCE_LEGAL,
ROUTE_ADMINX_ROUTE_MANAGE_STEWARDS_OUT_PROVINCE_TRUE,
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_TRUE_GUILDS,
ROUTE_SLAUGHTER_INVENTORY_SELL_CARCASS_OUT_PROVINCE, ROUTE_SLAUGHTER_INVENTORY_SELL_CARCASS_OUT_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE, ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE,
ROUTE_STEWARD_SALE_OUT_PROVINCE, ROUTE_STEWARD_SALE_OUT_PROVINCE,
@@ -29,6 +33,15 @@ import {
validationSchemaForSlaughterAddBuyer, validationSchemaForSlaughterAddBuyer,
} from "./InquiryForSlaughterAddBuyer"; } from "./InquiryForSlaughterAddBuyer";
import { useFormik } from "formik"; import { useFormik } from "formik";
import {
AdminAddBuyerForm,
handleSetFormDataFromTableDataForAdminAddBuyer,
handleSubmitForAdminAddBuyer,
InquiryForAdminAddBuyer,
validationSchemaForAdminAddBuyer,
} from "./InquiryForAdminAddBuyer";
import { inspectorGetKillHousesService } from "../../../inspector/services/inspector-get-kill-houses";
import { slaughterGetStewardsForAllocateService } from "../../../slaughter-house/services/slaughter-get-guilds-for-allocate";
// userType enums = steward | steward_true | steward_legal | _true | _legal // userType enums = steward | steward_true | steward_legal | _true | _legal
@@ -46,6 +59,17 @@ const getCurrentPage = (role, pathname) => {
return "slaughter_manage_add_buyer"; return "slaughter_manage_add_buyer";
} }
} }
if (role === "AdminX") {
const routes = [
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_TRUE_GUILDS,
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTE_ADMINX_ROUTE_MANAGE_STEWARDS_OUT_PROVINCE_LEGAL,
ROUTE_ADMINX_ROUTE_MANAGE_STEWARDS_OUT_PROVINCE_TRUE,
];
if (routes.some((r) => r === pathname)) {
return "admin_add_buyer";
}
}
}; };
const getInitialValues = (page) => { const getInitialValues = (page) => {
@@ -60,8 +84,16 @@ const getInitialValues = (page) => {
if (page === "steward_add_buyer" || page === "slaughter_manage_add_buyer") { if (page === "steward_add_buyer" || page === "slaughter_manage_add_buyer") {
return initialValues; return initialValues;
} else if (page === "slaughter_add_buyer") { } else if (page === "slaughter_add_buyer") {
initialValues.nationalId = ""; return {
return initialValues; ...initialValues,
nationalId: "",
};
} else if (page === "admin_add_buyer") {
return {
...initialValues,
role_key: "",
type: "",
};
} }
return initialValues; return initialValues;
}; };
@@ -74,9 +106,18 @@ export const StewardAddBuyer = ({
buyerType = "", buyerType = "",
// buyerYype => "Guilds" | "Steward" // buyerYype => "Guilds" | "Steward"
}) => { }) => {
const role = getRoleFromUrl();
const { pathname } = useLocation();
const page = getCurrentPage(role, pathname);
const IS_STEWARD_ADD_BUYER = page === "steward_add_buyer";
const IS_SLAUGHTER_ADD_BUYER = page === "slaughter_add_buyer";
const IS_SLAUGHTER_MANAGE_ADD_BUYER = page === "slaughter_manage_add_buyer";
const IS_ADMIN_ADD_BUYER = page === "admin_add_buyer";
const { const {
killHouses, killHouses,
setKillhouses,
stewards, stewards,
setStewards, setStewards,
provinceData, provinceData,
@@ -84,21 +125,10 @@ export const StewardAddBuyer = ({
setCityData, setCityData,
userData, userData,
setUserData, setUserData,
} = useAddBuyer(); } = useAddBuyer(page);
const role = getRoleFromUrl();
const { pathname } = useLocation(); const { selectedSubUser } = useSelector((state) => state.userSlice);
const { selectedSubUser } = useSelector((state) => state.userSlice);
const page = getCurrentPage(role, pathname);
const IS_STEWARD_ADD_BUYER = page === "steward_add_buyer";
const IS_SLAUGHTER_ADD_BUYER = page === "slaughter_add_buyer";
const IS_SLAUGHTER_MANAGE_ADD_BUYER = page === "slaughter_manage_add_buyer";
// const IS_MANAGE_STEWARDS = userType === "steward";
// const IS_ADMINX = role === "AdminX";
// const IS_OUT_PROVINCE = pathname.includes("out-province");
// const { inspectorGetKillHouses } = useSelector(
// (state) => state.inspectorSlice
// );
const [openNotif] = useContext(AppContext); const [openNotif] = useContext(AppContext);
const [notFound, setNotFound] = useState(false); const [notFound, setNotFound] = useState(false);
const dispatch = useDispatch(); const dispatch = useDispatch();
@@ -109,12 +139,32 @@ export const StewardAddBuyer = ({
? validationSchemaForStewardAddBuyer ? validationSchemaForStewardAddBuyer
: IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER : IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER
? validationSchemaForSlaughterAddBuyer(isRealPerson, isEdit) ? validationSchemaForSlaughterAddBuyer(isRealPerson, isEdit)
: IS_ADMIN_ADD_BUYER
? validationSchemaForAdminAddBuyer(isRealPerson, isEdit)
: Yup.object({}), : Yup.object({}),
}); });
useEffect(() => { useEffect(() => {
formik.validateForm(); if (isEdit) {
}, []); formik.validateForm();
}
}, [isEdit]);
useEffect(() => {
if (IS_ADMIN_ADD_BUYER) {
if (formik.values.type === "KillHouse") {
dispatch(inspectorGetKillHousesService());
} else {
dispatch(
slaughterGetStewardsForAllocateService({
free: true,
})
).then((r) => {
setStewards(r.payload.data || []);
});
}
}
}, [formik.values.type]);
useEffect(() => { useEffect(() => {
if (isEdit) { if (isEdit) {
@@ -124,6 +174,9 @@ export const StewardAddBuyer = ({
if (IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER) { if (IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER) {
handleSetFormDataFromTableDataForSlaughterAddBuyer(data, formik); handleSetFormDataFromTableDataForSlaughterAddBuyer(data, formik);
} }
if (IS_ADMIN_ADD_BUYER) {
handleSetFormDataFromTableDataForAdminAddBuyer(data, formik);
}
} }
}, [isEdit]); }, [isEdit]);
@@ -167,6 +220,16 @@ export const StewardAddBuyer = ({
isRealPerson={isRealPerson} isRealPerson={isRealPerson}
provinceData={provinceData} provinceData={provinceData}
/> />
) : IS_ADMIN_ADD_BUYER ? (
<InquiryForAdminAddBuyer
notFound={notFound}
setNotFound={setNotFound}
setUserData={setUserData}
formik={formik}
isEdit={isEdit}
isRealPerson={isRealPerson}
provinceData={provinceData}
/>
) : null ) : null
) : null} ) : null}
{userData || notFound || isEdit ? ( {userData || notFound || isEdit ? (
@@ -185,6 +248,16 @@ export const StewardAddBuyer = ({
notFound={notFound} notFound={notFound}
isRealPerson={isRealPerson} isRealPerson={isRealPerson}
/> />
) : IS_ADMIN_ADD_BUYER ? (
<AdminAddBuyerForm
formik={formik}
provinceData={provinceData}
cityData={cityData}
notFound={notFound}
isRealPerson={isRealPerson}
killHouses={killHouses}
stewards={stewards}
/>
) : null ) : null
) : null} ) : null}
{(userData || notFound || isEdit) && ( {(userData || notFound || isEdit) && (
@@ -233,6 +306,19 @@ export const StewardAddBuyer = ({
buyerType buyerType
); );
} }
if (IS_ADMIN_ADD_BUYER) {
handleSubmitForAdminAddBuyer(
formik,
dispatch,
isEdit,
data,
updateTable,
openNotif,
DRAWER,
isRealPerson,
buyerType
);
}
}} }}
> >
{isEdit ? "ویرایش" : "ثبت"} {isEdit ? "ویرایش" : "ثبت"}

View File

@@ -1,14 +1,17 @@
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useDispatch } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { slaughterGetProvinceService } from "../../../../slaughter-house/services/slaughter-get-provinces"; import { slaughterGetProvinceService } from "../../../../slaughter-house/services/slaughter-get-provinces";
export const useAddBuyer = () => { export const useAddBuyer = (page) => {
const dispatch = useDispatch(); const dispatch = useDispatch();
const [killHouses, setKillhouses] = useState([]); const [killHouses, setKillhouses] = useState([]);
const [stewards, setStewards] = useState([]); const [stewards, setStewards] = useState([]);
const [userData, setUserData] = useState(null); const [userData, setUserData] = useState(null);
const [provinceData, setProvinceData] = useState([]); const [provinceData, setProvinceData] = useState([]);
const [cityData, setCityData] = useState([]); const [cityData, setCityData] = useState([]);
const { inspectorGetKillHouses } = useSelector(
(state) => state.inspectorSlice
);
useEffect(() => { useEffect(() => {
dispatch(slaughterGetProvinceService()).then((r) => { dispatch(slaughterGetProvinceService()).then((r) => {
@@ -16,6 +19,15 @@ export const useAddBuyer = () => {
}); });
}, []); }, []);
useEffect(() => {
if (page === "admin_add_buyer") {
const d = inspectorGetKillHouses?.map((item) => {
return { name: item.name, key: item.key, killer: item.killer };
});
setKillhouses(d);
}
}, [inspectorGetKillHouses]);
return { return {
killHouses, killHouses,
setKillhouses, setKillhouses,