implement => add buyer form

This commit is contained in:
2026-01-31 17:14:08 +03:30
parent fa3543f43e
commit 2705e226e1
12 changed files with 1327 additions and 27 deletions

View File

@@ -30,6 +30,13 @@ import {
ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_LEGAL_GUILDS, ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_LEGAL_GUILDS,
ROUTE_ADMINX_ROUTE_IN_PROVINCE_LEGAL_GUILDS, ROUTE_ADMINX_ROUTE_IN_PROVINCE_LEGAL_GUILDS,
ROUTE_PROVINCE_ROUTE_IN_PROVINCE_LEGAL_GUILDS, ROUTE_PROVINCE_ROUTE_IN_PROVINCE_LEGAL_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_GUILDS_REQUESTS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_TRUE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_LEGAL,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_LEGAL,
} from "../../../../routes/routes"; } from "../../../../routes/routes";
import LinkItem from "../../../../components/link-item/LinkItem"; import LinkItem from "../../../../components/link-item/LinkItem";
import { MdCorporateFare } from "react-icons/md"; import { MdCorporateFare } from "react-icons/md";
@@ -63,7 +70,11 @@ export const GuildsOperations = () => {
? ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_GUILDS ? ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_GUILDS
: getRoleFromUrl() === "AdminX" : getRoleFromUrl() === "AdminX"
? ROUTE_ADMINX_ROUTE_IN_PROVINCE_GUILDS ? ROUTE_ADMINX_ROUTE_IN_PROVINCE_GUILDS
: ROUTE_PROVINCE_ROUTE_IN_PROVINCE_GUILDS : getRoleFromUrl() === "KillHouse"
? ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE
: getRoleFromUrl() === "ProvinceOperator"
? ROUTE_PROVINCE_ROUTE_IN_PROVINCE_GUILDS
: null
} }
> >
<LinkItem <LinkItem
@@ -77,7 +88,11 @@ export const GuildsOperations = () => {
? ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_GUILDS ? ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_GUILDS
: getRoleFromUrl() === "AdminX" : getRoleFromUrl() === "AdminX"
? ROUTE_ADMINX_ROUTE_OUT_PROVINCE_GUILDS ? ROUTE_ADMINX_ROUTE_OUT_PROVINCE_GUILDS
: ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_GUILDS : getRoleFromUrl() === "KillHouse"
? ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE
: getRoleFromUrl() === "ProvinceOperator"
? ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_GUILDS
: null
} }
> >
<LinkItem <LinkItem
@@ -91,6 +106,7 @@ export const GuildsOperations = () => {
ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_GUILDS, ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_GUILDS,
ROUTE_ADMINX_ROUTE_IN_PROVINCE_GUILDS, ROUTE_ADMINX_ROUTE_IN_PROVINCE_GUILDS,
ROUTE_PROVINCE_ROUTE_IN_PROVINCE_GUILDS, ROUTE_PROVINCE_ROUTE_IN_PROVINCE_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE,
].includes(pathname) && ( ].includes(pathname) && (
<> <>
<NavLink <NavLink
@@ -99,7 +115,11 @@ export const GuildsOperations = () => {
? ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_GUILDS_REQUESTS ? ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_GUILDS_REQUESTS
: getRoleFromUrl() === "AdminX" : getRoleFromUrl() === "AdminX"
? ROUTE_ADMINX_ROUTE_IN_PROVINCE_GUILDS_REQUESTS ? ROUTE_ADMINX_ROUTE_IN_PROVINCE_GUILDS_REQUESTS
: ROUTE_PROVINCE_ROUTE_IN_PROVINCE_GUILDS_REQUESTS : getRoleFromUrl() === "KillHouse"
? ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_GUILDS_REQUESTS
: getRoleFromUrl() === "ProvinceOperator"
? ROUTE_PROVINCE_ROUTE_IN_PROVINCE_GUILDS_REQUESTS
: null
} }
> >
<LinkItem <LinkItem
@@ -128,7 +148,11 @@ export const GuildsOperations = () => {
? ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_TRUE_GUILDS ? ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_TRUE_GUILDS
: getRoleFromUrl() === "AdminX" : getRoleFromUrl() === "AdminX"
? ROUTE_ADMINX_ROUTE_IN_PROVINCE_TRUE_GUILDS ? ROUTE_ADMINX_ROUTE_IN_PROVINCE_TRUE_GUILDS
: ROUTE_PROVINCE_ROUTE_IN_PROVINCE_TRUE_GUILDS : getRoleFromUrl() === "KillHouse"
? ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_TRUE
: getRoleFromUrl() === "ProvinceOperator"
? ROUTE_PROVINCE_ROUTE_IN_PROVINCE_TRUE_GUILDS
: null
} }
> >
<LinkItem <LinkItem
@@ -142,7 +166,11 @@ export const GuildsOperations = () => {
? ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_LEGAL_GUILDS ? ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_LEGAL_GUILDS
: getRoleFromUrl() === "AdminX" : getRoleFromUrl() === "AdminX"
? ROUTE_ADMINX_ROUTE_IN_PROVINCE_LEGAL_GUILDS ? ROUTE_ADMINX_ROUTE_IN_PROVINCE_LEGAL_GUILDS
: ROUTE_PROVINCE_ROUTE_IN_PROVINCE_LEGAL_GUILDS : getRoleFromUrl() === "KillHouse"
? ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_LEGAL
: getRoleFromUrl() === "ProvinceOperator"
? ROUTE_PROVINCE_ROUTE_IN_PROVINCE_LEGAL_GUILDS
: null
} }
> >
<LinkItem <LinkItem
@@ -193,6 +221,7 @@ export const GuildsOperations = () => {
ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_GUILDS, ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_GUILDS,
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_GUILDS, ROUTE_ADMINX_ROUTE_OUT_PROVINCE_GUILDS,
ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_GUILDS, ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE,
].includes(pathname) && ( ].includes(pathname) && (
<> <>
<NavLink <NavLink
@@ -201,7 +230,11 @@ export const GuildsOperations = () => {
? ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_TRUE_GUILDS ? ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_TRUE_GUILDS
: getRoleFromUrl() === "AdminX" : getRoleFromUrl() === "AdminX"
? ROUTE_ADMINX_ROUTE_OUT_PROVINCE_TRUE_GUILDS ? ROUTE_ADMINX_ROUTE_OUT_PROVINCE_TRUE_GUILDS
: ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_TRUE_GUILDS : getRoleFromUrl() === "KillHouse"
? ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE
: getRoleFromUrl() === "ProvinceOperator"
? ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_TRUE_GUILDS
: null
} }
> >
<LinkItem <LinkItem
@@ -215,7 +248,11 @@ export const GuildsOperations = () => {
? ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_LEGAL_GUILDS ? ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_LEGAL_GUILDS
: getRoleFromUrl() === "AdminX" : getRoleFromUrl() === "AdminX"
? ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS ? ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS
: ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_LEGAL_GUILDS : getRoleFromUrl() === "KillHouse"
? ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_LEGAL
: getRoleFromUrl() === "ProvinceOperator"
? ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_LEGAL_GUILDS
: null
} }
> >
<LinkItem <LinkItem

View File

@@ -83,6 +83,7 @@ function TradePanelPurchaseModal({ item, updateTable, isEdit = false }) {
recive_time: "12 - 14", recive_time: "12 - 14",
kill_capacity: parseInt(values.killCapacity), kill_capacity: parseInt(values.killCapacity),
payment_deadline_days: parseInt(values.paymentDeadlineDays), payment_deadline_days: parseInt(values.paymentDeadlineDays),
role_key: selectedSubUser?.key,
...(isEdit ? { key: item.key } : { poultry_request_key: item.key }), ...(isEdit ? { key: item.key } : { poultry_request_key: item.key }),
}; };

View File

@@ -486,8 +486,6 @@ export const SlaughterSellCarcassOutProvinceAddBuyer = ({
} }
}; };
console.log(formik.errors);
return ( return (
<Grid <Grid
container container

View File

@@ -22,6 +22,7 @@ import { SlaughterSellCarcassOutProvinceAddBuyer } from "../slaughter-sell-carca
import EditIcon from "@mui/icons-material/Edit"; import EditIcon from "@mui/icons-material/Edit";
import { RiSearchLine } from "react-icons/ri"; import { RiSearchLine } from "react-icons/ri";
import { checkPathStartsWith } from "../../../../utils/checkPathStartsWith"; import { checkPathStartsWith } from "../../../../utils/checkPathStartsWith";
import { StewardAddBuyer } from "../../../steward/components/steward-add-buyer/StewardAddBuyer";
export const SlaughterSellCarcassOutProvinceBuyers = () => { export const SlaughterSellCarcassOutProvinceBuyers = () => {
const handleTextChange = (event) => { const handleTextChange = (event) => {
@@ -83,16 +84,11 @@ export const SlaughterSellCarcassOutProvinceBuyers = () => {
right: !(window.innerWidth <= 600), right: !(window.innerWidth <= 600),
bottom: window.innerWidth <= 600, bottom: window.innerWidth <= 600,
content: ( content: (
<SlaughterSellCarcassOutProvinceAddBuyer <StewardAddBuyer
updateTable={updateTable} updateTable={updateTable}
isEdit isEdit
data={item} data={item}
defaultPersonType={ isRealPerson={personType === "real"}
item?.buyer?.parentLegalPersonNationalCode
? "legal"
: "real"
}
defaultNationalCode={item?.buyer?.nationalCode}
/> />
), ),
title: "ویرایش خریدار", title: "ویرایش خریدار",
@@ -203,7 +199,8 @@ export const SlaughterSellCarcassOutProvinceBuyers = () => {
right: !(window.innerWidth <= 600), right: !(window.innerWidth <= 600),
bottom: window.innerWidth <= 600, bottom: window.innerWidth <= 600,
content: ( content: (
<SlaughterSellCarcassOutProvinceAddBuyer <StewardAddBuyer
isRealPerson={personType === "real"}
updateTable={updateTable} updateTable={updateTable}
/> />
), ),

View File

@@ -0,0 +1,594 @@
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, IconButton, 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";
export const validationSchemaForSlaughterAddBuyer = (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 === false && isEdit
? Yup.string().nullable()
: Yup.string()
.required("این فیلد اجباری است!")
.matches(/^\d{10,11}$/, "شناسه باید 10 یا 11 رقم و فقط عدد باشد"),
});
export const handleSubmitForSlaughterAddBuyer = (
formik,
dispatch,
isEdit,
tableData,
updateTable,
openNotif,
DRAWER,
selectedSubUser,
isRealPerson,
buyerType
) => {
if (isEdit) {
const submitData = {
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,
role_key: selectedSubUser?.key || "",
buyer_type: tableData?.buyerType,
buyer_key: tableData?.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,
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,
role_key: selectedSubUser?.key,
...(!isRealPerson && {
isRealPerson: false,
info_value: formik.values.nationalId,
}),
...(buyerType && {
buyer_type: buyerType,
}),
};
// 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 handleSetFormDataFromTableDataForSlaughterAddBuyer = (
tableData,
formik
) => {
console.log(tableData);
const formData = {
mobile: tableData.mobile || "",
firstName: tableData.firstName || "",
lastName: tableData.lastName || "",
province: tableData.province || "",
city: tableData.city || "",
nationalId: tableData.nationalId || "",
unit_name: tableData?.unitName || "",
};
formik.setValues(formData);
setTimeout(() => {
formik.validateForm();
}, 1);
};
export const handleSetFormDataFromUserDataForStewardAddBuyer = (
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 || "",
};
formik.setValues(formData);
setTimeout(() => {
formik.validateForm();
}, 1);
}
};
export const InquiryForSlaughterAddBuyer = ({
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({
personType: Yup.string().oneOf(["real", "legal"]).required(),
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;
setInquiryInProgress(true);
setNotFound(false);
setUserData(null);
let personData = null;
let selectedGuild = null;
try {
if (!isRealPerson) {
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,
};
setUserData(aggregatedUserData);
handleSetFormDataFromUserDataForStewardAddBuyer(
aggregatedUserData,
formik
);
openNotif({
vertical: "top",
horizontal: "center",
msg: "اطلاعات حقوقی با موفقیت دریافت شد.",
severity: "success",
});
} else {
setNotFound(true);
formik.setFieldValue("nationalId", nationalCode);
openNotif({
vertical: "top",
horizontal: "center",
msg: "اطلاعات حقوقی برای این شناسه یافت نشد، لطفا اطلاعات را به صورت دستی ثبت کنید.",
severity: "warning",
});
}
return;
} else {
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,
};
setUserData(aggregatedUserData);
handleSetFormDataFromUserDataForStewardAddBuyer(
aggregatedUserData,
formik
);
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 SlaughterAddBuyerForm = ({
formik,
provinceData,
cityData,
notFound,
isRealPerson,
}) => {
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}
/>
<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>
)}
<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={
formik.values.city
? {
id: formik.values.city,
label: formik.values.city,
}
: null
}
renderInput={(params) => (
<TextField {...params} label="شهر را انتخاب کنید" />
)}
/>
{!notFound && (
<Typography variant="caption" color="error">
شهر: {formik.values.city}
</Typography>
)}
</Grid>
);
};

View File

@@ -0,0 +1,365 @@
import { Autocomplete, IconButton, TextField, Typography } from "@mui/material";
import { Grid } from "../../../../components/grid/Grid";
import { useFormik } from "formik";
import { Yup } from "../../../../lib/yup/yup";
import { SPACING } from "../../../../data/spacing";
import { useDispatch, useSelector } from "react-redux";
import { LOADING_END } from "../../../../lib/redux/slices/appSlice";
import {
stewardSellOutGetBuyers,
stewatdSubmitBuyerDataService,
} from "../../../guild/services/steward-sell-out-get-buyers";
import { useContext, useEffect } from "react";
import { AppContext } from "../../../../contexts/AppContext";
import SearchIcon from "@mui/icons-material/Search";
import { slaughterEditBuyerDataService } from "../../../slaughter-house/services/slaughter-house-submit-buyer";
export const validationSchemaForStewardAddBuyer = 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("لطفا فیلد را به درستی وارد کنید!"),
});
export const handleSubmitForStewardAddBuyer = (
formik,
dispatch,
isEdit,
tableData,
updateTable,
openNotif,
DRAWER,
role
) => {
if (isEdit) {
dispatch(
slaughterEditBuyerDataService({
buyer_key: tableData?.key,
mobile: formik.values.mobile,
first_name: formik.values.firstName,
last_name: formik.values.lastName,
unit_name: formik.values.unit_name,
city: formik.values.city,
province: formik.values.province,
})
).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 {
dispatch(
stewatdSubmitBuyerDataService({
role: role,
mobile: formik.values.mobile,
first_name: formik.values.firstName,
last_name: formik.values.lastName,
unit_name: formik.values.unit_name,
city: formik.values.city,
province: formik.values.province,
})
).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 handleSetFormDataFromTableDataForStewardAddBuyer = (
tableData,
formik
) => {
formik.setValues({
mobile: tableData.mobile || "",
firstName: tableData.firstName || "",
lastName: tableData.lastName || "",
unit_name: tableData.unitName || "",
province: tableData.province || "",
city: tableData.city || "",
});
setTimeout(() => {
formik.validateForm();
}, 1);
};
export const handleSetFormDataFromUserDataForStewardAddBuyer = (
userData,
formik
) => {
const user = userData?.[0];
if (user) {
console.log(user);
formik.setValues({
mobile: user.mobile || "",
firstName: user.firstName || "",
lastName: user.lastName || "",
unit_name: user.unitName || "",
province: user.province || "",
city: user.city || "",
});
setTimeout(() => {
formik.validateForm();
}, 1);
}
};
export const InquiryForStewardAddBuyer = ({
notFound,
setNotFound,
setUserData,
formik,
}) => {
const [openNotif] = useContext(AppContext);
const selectedSubUser = useSelector(
(state) => state.userSlice.selectedSubUser
);
const dispatch = useDispatch();
const formik2 = useFormik({
initialValues: {
mobile: "",
},
validationSchema: Yup.object({
mobile: Yup.string()
.required("این فیلد اجباری است!")
.min(11, "شماره موبایل باید 11 رقم باشد")
.max(11, "شماره موبایل باید 11 رقم باشد")
.matches(/^09\d{9}$/, "شماره موبایل باید با 09 شروع شود و 11 رقم باشد"),
}),
validateOnMount: true,
});
const handleInquiry = () => {
dispatch(
stewardSellOutGetBuyers({
mobile: formik2.values.mobile,
role_key: selectedSubUser?.key || "",
})
).then((r) => {
dispatch(LOADING_END());
if (r.error) {
setNotFound(true);
openNotif({
vertical: "top",
horizontal: "center",
msg: "خریدار یافت نشد، یک خریدار جدید ثبت کنید!",
severity: "error",
});
} else {
const responseData = r.payload?.data;
// Check if response is an empty array
if (Array.isArray(responseData) && responseData.length === 0) {
setNotFound(true);
setUserData(null);
} else {
setNotFound(false);
handleSetFormDataFromUserDataForStewardAddBuyer(responseData, formik);
setUserData(responseData);
}
}
});
};
useEffect(() => {
if (notFound) {
formik.setFieldValue("mobile", formik2.values.mobile);
}
}, [notFound]);
return (
<Grid container xs={12}>
<Typography>جستجو کاربر</Typography>
<Grid mt={SPACING.SMALL} display="flex" width={1}>
<TextField
fullWidth
id="mobile"
label="شماره موبایل"
variant="outlined"
value={formik2.values.mobile}
error={formik2.touched.mobile && Boolean(formik2.errors.mobile)}
onChange={(e) => {
formik2.handleChange(e);
// Reset notFound when user starts typing
if (notFound) {
setNotFound(false);
}
}}
onBlur={formik2.handleBlur}
helperText={formik2.touched.mobile && formik2.errors.mobile}
/>
<IconButton
disabled={!formik2.isValid}
aria-label="search"
color="primary"
onClick={handleInquiry}
>
<SearchIcon />
</IconButton>
</Grid>
{notFound && (
<Grid container xs={12} mt={SPACING.SMALL}>
<Typography variant="body2" color="error" sx={{ width: "100%" }}>
خریداری یافت نشد
</Typography>
</Grid>
)}
</Grid>
);
};
export const StewardAddBuyerForm = ({
formik,
provinceData,
cityData,
notFound,
}) => {
return (
<Grid
container
justifyContent="space-between"
alignItems="start"
xs={12}
direction="column"
gap={2}
>
<TextField
fullWidth
id="mobile"
label="شماره موبایل"
variant="outlined"
value={formik.values.mobile}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
helperText={formik.touched.mobile && 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}
/>
<TextField
fullWidth
id="lastName"
label="نام خانوادگی"
variant="outlined"
value={formik.values.lastName}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
helperText={formik.touched.lastName && 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}
/>
{provinceData.length > 0 && (
<Autocomplete
style={{ width: "100%" }}
disablePortal
id="province"
options={
provinceData
? provinceData.map((i) => ({ id: i.name, label: i.name }))
: []
}
onChange={(e, value) => {
formik.setFieldValue("province", value ? value.id : "");
formik.setFieldValue("city", "");
}}
renderInput={(params) => (
<TextField {...params} label="استان را انتخاب کنید" />
)}
value={
provinceData.find((i) => i.name === formik.values.province)?.name
}
/>
)}
{!notFound && (
<Typography variant="caption" color="error">
استان: {formik.values.province}
</Typography>
)}
{cityData.length > 0 && (
<Autocomplete
key={formik.values.city}
style={{ width: "100%" }}
disabled={!formik.values.province}
disablePortal
id="city"
options={
cityData ? cityData.map((i) => ({ id: i.name, label: i.name })) : []
}
onChange={(e, value) => {
formik.setFieldValue("city", value ? value.id : "");
}}
renderInput={(params) => (
<TextField {...params} label="شهر را انتخاب کنید" />
)}
value={cityData.find((i) => i.name === formik.values.city)?.name}
/>
)}
{!notFound && (
<Typography variant="caption" color="error">
شهر: {formik.values.city}
</Typography>
)}
</Grid>
);
};

View File

@@ -0,0 +1,244 @@
import React, { useContext, useEffect, useState } from "react";
import { Grid } from "../../../../components/grid/Grid";
import { Button } from "@mui/material";
import { Yup } from "../../../../lib/yup/yup";
import { AppContext } from "../../../../contexts/AppContext";
import { useDispatch, useSelector } from "react-redux";
import { DRAWER } from "../../../../lib/redux/slices/appSlice";
import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl";
import { useLocation } from "react-router-dom";
import {
ROUTE_SLAUGHTER_INVENTORY_SELL_CARCASS_OUT_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE,
ROUTE_STEWARD_SALE_OUT_PROVINCE,
} from "../../../../routes/routes";
import {
handleSetFormDataFromTableDataForStewardAddBuyer,
handleSubmitForStewardAddBuyer,
InquiryForStewardAddBuyer,
StewardAddBuyerForm,
validationSchemaForStewardAddBuyer,
} from "./InquiryForStewardAddBuyer";
import { useAddBuyer } from "./hooks/useAddBuyer";
import { slaughterGetCitiesService } from "../../../slaughter-house/services/slaughter-get-provinces";
import {
handleSetFormDataFromTableDataForSlaughterAddBuyer,
handleSubmitForSlaughterAddBuyer,
InquiryForSlaughterAddBuyer,
SlaughterAddBuyerForm,
validationSchemaForSlaughterAddBuyer,
} from "./InquiryForSlaughterAddBuyer";
import { useFormik } from "formik";
// userType enums = steward | steward_true | steward_legal | _true | _legal
const getCurrentPage = (role, pathname) => {
if (role === "Steward") {
if (pathname === ROUTE_STEWARD_SALE_OUT_PROVINCE) {
return "steward_add_buyer";
}
}
if (role === "KillHouse") {
if (pathname === ROUTE_SLAUGHTER_INVENTORY_SELL_CARCASS_OUT_PROVINCE) {
return "slaughter_add_buyer";
}
if (pathname === ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE) {
return "slaughter_manage_add_buyer";
}
}
};
const getInitialValues = (page) => {
const initialValues = {
mobile: "",
firstName: "",
lastName: "",
unit_name: "",
province: "",
city: "",
};
if (page === "steward_add_buyer" || page === "slaughter_manage_add_buyer") {
return initialValues;
} else if (page === "slaughter_add_buyer") {
initialValues.nationalId = "";
return initialValues;
}
return initialValues;
};
export const StewardAddBuyer = ({
updateTable,
isEdit = false,
data,
isRealPerson,
buyerType = "",
// buyerYype => "Guilds" | "Steward"
}) => {
const {
killHouses,
setKillhouses,
stewards,
setStewards,
provinceData,
cityData,
setCityData,
userData,
setUserData,
} = useAddBuyer();
const role = getRoleFromUrl();
const { pathname } = useLocation();
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 [notFound, setNotFound] = useState(false);
const dispatch = useDispatch();
const formik = useFormik({
initialValues: getInitialValues(page),
validationSchema: IS_STEWARD_ADD_BUYER
? validationSchemaForStewardAddBuyer
: IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER
? validationSchemaForSlaughterAddBuyer(isRealPerson, isEdit)
: Yup.object({}),
});
useEffect(() => {
formik.validateForm();
}, []);
useEffect(() => {
if (isEdit) {
if (IS_STEWARD_ADD_BUYER) {
handleSetFormDataFromTableDataForStewardAddBuyer(data, formik);
}
if (IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER) {
handleSetFormDataFromTableDataForSlaughterAddBuyer(data, formik);
}
}
}, [isEdit]);
useEffect(() => {
if (formik.values.province) {
setCityData(
[],
dispatch(slaughterGetCitiesService(formik.values.province)).then(
(r) => {
setCityData(r.payload.data);
}
)
);
}
}, [formik.values.province]);
return (
<Grid
container
justifyContent="space-between"
alignItems="center"
xs={12}
direction="column"
gap={2}
>
{!isEdit ? (
IS_STEWARD_ADD_BUYER ? (
<InquiryForStewardAddBuyer
notFound={notFound}
setNotFound={setNotFound}
setUserData={setUserData}
formik={formik}
/>
) : IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER ? (
<InquiryForSlaughterAddBuyer
notFound={notFound}
setNotFound={setNotFound}
setUserData={setUserData}
formik={formik}
isEdit={isEdit}
isRealPerson={isRealPerson}
provinceData={provinceData}
/>
) : null
) : null}
{userData || notFound || isEdit ? (
IS_STEWARD_ADD_BUYER ? (
<StewardAddBuyerForm
formik={formik}
provinceData={provinceData}
cityData={cityData}
notFound={notFound}
/>
) : IS_SLAUGHTER_ADD_BUYER || IS_SLAUGHTER_MANAGE_ADD_BUYER ? (
<SlaughterAddBuyerForm
formik={formik}
provinceData={provinceData}
cityData={cityData}
notFound={notFound}
isRealPerson={isRealPerson}
/>
) : null
) : null}
{(userData || notFound || isEdit) && (
<Grid container xs={12}>
<Button
fullWidth
variant="contained"
disabled={!formik.isValid}
onClick={() => {
if (IS_STEWARD_ADD_BUYER) {
handleSubmitForStewardAddBuyer(
formik,
dispatch,
isEdit,
data,
updateTable,
openNotif,
DRAWER,
role
);
}
if (IS_SLAUGHTER_ADD_BUYER) {
handleSubmitForSlaughterAddBuyer(
formik,
dispatch,
isEdit,
data,
updateTable,
openNotif,
DRAWER,
selectedSubUser,
isRealPerson
);
}
if (IS_SLAUGHTER_MANAGE_ADD_BUYER) {
handleSubmitForSlaughterAddBuyer(
formik,
dispatch,
isEdit,
data,
updateTable,
openNotif,
DRAWER,
selectedSubUser,
isRealPerson,
buyerType
);
}
}}
>
{isEdit ? "ویرایش" : "ثبت"}
</Button>
</Grid>
)}
</Grid>
);
};

View File

@@ -0,0 +1,30 @@
import { useEffect, useState } from "react";
import { useDispatch } from "react-redux";
import { slaughterGetProvinceService } from "../../../../slaughter-house/services/slaughter-get-provinces";
export const useAddBuyer = () => {
const dispatch = useDispatch();
const [killHouses, setKillhouses] = useState([]);
const [stewards, setStewards] = useState([]);
const [userData, setUserData] = useState(null);
const [provinceData, setProvinceData] = useState([]);
const [cityData, setCityData] = useState([]);
useEffect(() => {
dispatch(slaughterGetProvinceService()).then((r) => {
setProvinceData(r.payload.data);
});
}, []);
return {
killHouses,
setKillhouses,
stewards,
setStewards,
userData,
setUserData,
provinceData,
cityData,
setCityData,
};
};

View File

@@ -13,9 +13,8 @@ import {
import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl"; import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl";
import { Grid } from "../../../../components/grid/Grid"; import { Grid } from "../../../../components/grid/Grid";
import ResponsiveTable from "../../../../components/responsive-table/ResponsiveTable"; import ResponsiveTable from "../../../../components/responsive-table/ResponsiveTable";
import { StewardSellOutOfProvinceAddBuyer } from "../steward-purchase-out-province-add-buyer/StewardSellOutOfProvinceAddBuyer";
import { StewardSellOutOfProvinceBuyersEditBuyer } from "../steward-sell-out-of-province-buyers-edit-buyer/StewardSellOutOfProvinceBuyersEditBuyer";
import { checkPathStartsWith } from "../../../../utils/checkPathStartsWith"; import { checkPathStartsWith } from "../../../../utils/checkPathStartsWith";
import { StewardAddBuyer } from "../steward-add-buyer/StewardAddBuyer";
export const StewardSellOutOfProvinceBuyers = () => { export const StewardSellOutOfProvinceBuyers = () => {
const handleTextChange = (event) => { const handleTextChange = (event) => {
@@ -82,7 +81,7 @@ export const StewardSellOutOfProvinceBuyers = () => {
right: !(window.innerWidth <= 600), right: !(window.innerWidth <= 600),
bottom: window.innerWidth <= 600, bottom: window.innerWidth <= 600,
content: ( content: (
<StewardSellOutOfProvinceBuyersEditBuyer <StewardAddBuyer
updateTable={updateTable} updateTable={updateTable}
isEdit isEdit
data={item} data={item}
@@ -140,9 +139,7 @@ export const StewardSellOutOfProvinceBuyers = () => {
DRAWER({ DRAWER({
right: !(window.innerWidth <= 600), right: !(window.innerWidth <= 600),
bottom: window.innerWidth <= 600, bottom: window.innerWidth <= 600,
content: ( content: <StewardAddBuyer updateTable={updateTable} />,
<StewardSellOutOfProvinceAddBuyer updateTable={updateTable} />
),
title: "افزودن خریدار", title: "افزودن خریدار",
}) })
); );

View File

@@ -57,6 +57,13 @@ import {
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS, ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_LEGAL_GUILDS, ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTE_SLAUGHTER_ROUTE_MANAGE_GUILDS, ROUTE_SLAUGHTER_ROUTE_MANAGE_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_GUILDS_REQUESTS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_TRUE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_LEGAL,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_LEGAL,
} from "../routes/routes"; } from "../routes/routes";
import { BackButton } from "../components/back-button/BackButton"; import { BackButton } from "../components/back-button/BackButton";
import { GuildsOperations } from "../features/province/components/guilds-operations/GuildsOperations"; import { GuildsOperations } from "../features/province/components/guilds-operations/GuildsOperations";
@@ -71,6 +78,7 @@ import { ManageGuildDistributions } from "../features/province/components/manage
import { ProvinceTrueGuildsOutProvince } from "../features/province/components/province-true-guilds-out-province/ProvinceTrueGuildsOutProvince"; import { ProvinceTrueGuildsOutProvince } from "../features/province/components/province-true-guilds-out-province/ProvinceTrueGuildsOutProvince";
import { ProvinceLegalGuildsInProvince } from "../features/province/components/province-legal-guilds-in-province/ProvinceLegalGuildsInProvince"; import { ProvinceLegalGuildsInProvince } from "../features/province/components/province-legal-guilds-in-province/ProvinceLegalGuildsInProvince";
import { ProvinceLegalGuildsOutProvince } from "../features/province/components/province-legal-guilds-out-province/ProvinceLegalGuildsOutProvince"; import { ProvinceLegalGuildsOutProvince } from "../features/province/components/province-legal-guilds-out-province/ProvinceLegalGuildsOutProvince";
import { ManageGuilds } from "../features/province/components/manage-guilds/ManageGuilds";
const MANAGE_ROUTES = [ const MANAGE_ROUTES = [
ROUTE_PROVINCE_ROUTE_MANAGE_GUILDS, ROUTE_PROVINCE_ROUTE_MANAGE_GUILDS,
@@ -88,6 +96,8 @@ const MANAGE_ROUTES = [
ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_GUILDS, ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_GUILDS,
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_GUILDS, ROUTE_ADMINX_ROUTE_OUT_PROVINCE_GUILDS,
ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_GUILDS, ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE,
]; ];
const GUILDS_OPERATIONS_ROUTES = [ const GUILDS_OPERATIONS_ROUTES = [
@@ -101,6 +111,8 @@ const GUILDS_OPERATIONS_ROUTES = [
ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_GUILDS, ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_GUILDS,
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_GUILDS, ROUTE_ADMINX_ROUTE_OUT_PROVINCE_GUILDS,
ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_GUILDS, ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE,
]; ];
const GUILDS_OPERATIONS_COMMERCE_ROUTES = [ const GUILDS_OPERATIONS_COMMERCE_ROUTES = [
@@ -151,6 +163,7 @@ const GUILDS_REQUESTS_ROUTES = [
ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_GUILDS_REQUESTS, ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_GUILDS_REQUESTS,
ROUTE_ADMINX_ROUTE_IN_PROVINCE_GUILDS_REQUESTS, ROUTE_ADMINX_ROUTE_IN_PROVINCE_GUILDS_REQUESTS,
ROUTE_GUILD_ROOM_ROUTE_GUILDS_REQUESTS, ROUTE_GUILD_ROOM_ROUTE_GUILDS_REQUESTS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_GUILDS_REQUESTS,
]; ];
const GUILDS_DISTRIBUTIONS_ROUTES = [ const GUILDS_DISTRIBUTIONS_ROUTES = [
@@ -162,18 +175,21 @@ const TRUE_GUILDS_OUT_PROVINCE_ROUTES = [
ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_TRUE_GUILDS, ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_TRUE_GUILDS,
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_TRUE_GUILDS, ROUTE_ADMINX_ROUTE_OUT_PROVINCE_TRUE_GUILDS,
ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_TRUE_GUILDS, ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_TRUE_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE,
]; ];
const LEGAL_GUILDS_IN_PROVINCE_ROUTES = [ const LEGAL_GUILDS_IN_PROVINCE_ROUTES = [
ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_LEGAL_GUILDS, ROUTE_SUPER_ADMIN_ROUTE_IN_PROVINCE_LEGAL_GUILDS,
ROUTE_ADMINX_ROUTE_IN_PROVINCE_LEGAL_GUILDS, ROUTE_ADMINX_ROUTE_IN_PROVINCE_LEGAL_GUILDS,
ROUTE_PROVINCE_ROUTE_IN_PROVINCE_LEGAL_GUILDS, ROUTE_PROVINCE_ROUTE_IN_PROVINCE_LEGAL_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_LEGAL,
]; ];
const LEGAL_GUILDS_OUT_PROVINCE_ROUTES = [ const LEGAL_GUILDS_OUT_PROVINCE_ROUTES = [
ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_LEGAL_GUILDS, ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS, ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_LEGAL_GUILDS, ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_LEGAL,
]; ];
const isPathnameIn = (pathname, routes) => routes.includes(pathname); const isPathnameIn = (pathname, routes) => routes.includes(pathname);
@@ -233,15 +249,19 @@ const Guilds = () => {
)} )}
{isPathnameIn(pathname, TRUE_GUILDS_OUT_PROVINCE_ROUTES) && ( {isPathnameIn(pathname, TRUE_GUILDS_OUT_PROVINCE_ROUTES) && (
<ProvinceTrueGuildsOutProvince /> <ProvinceTrueGuildsOutProvince userType="guild" />
)}
{pathname === ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_TRUE && (
<ManageGuilds userType="guild" />
)} )}
{isPathnameIn(pathname, LEGAL_GUILDS_IN_PROVINCE_ROUTES) && ( {isPathnameIn(pathname, LEGAL_GUILDS_IN_PROVINCE_ROUTES) && (
<ProvinceLegalGuildsInProvince /> <ProvinceLegalGuildsInProvince userType="guild" />
)} )}
{isPathnameIn(pathname, LEGAL_GUILDS_OUT_PROVINCE_ROUTES) && ( {isPathnameIn(pathname, LEGAL_GUILDS_OUT_PROVINCE_ROUTES) && (
<ProvinceLegalGuildsOutProvince /> <ProvinceLegalGuildsOutProvince userType="guild" />
)} )}
</Grid> </Grid>
</Grid> </Grid>

View File

@@ -446,6 +446,7 @@ const consolidatedRouting = [
ROUTES.ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_LEGAL_GUILDS, ROUTES.ROUTE_SUPER_ADMIN_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTES.ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS, ROUTES.ROUTE_ADMINX_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTES.ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_LEGAL_GUILDS, ROUTES.ROUTE_PROVINCE_ROUTE_OUT_PROVINCE_LEGAL_GUILDS,
ROUTES.ROUTE_SLAUGHTER_ROUTE_MANAGE_GUILDS,
], ],
Page: Guilds, Page: Guilds,
exact: false, exact: false,

View File

@@ -65,6 +65,13 @@ import {
ROUTE_SLAUGHTER_MANAGE_STEWARDS_OUT_PROVINCE, ROUTE_SLAUGHTER_MANAGE_STEWARDS_OUT_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_STEWARDS_OUT_PROVINCE_TRUE, ROUTE_SLAUGHTER_MANAGE_STEWARDS_OUT_PROVINCE_TRUE,
ROUTE_SLAUGHTER_MANAGE_STEWARDS_OUT_PROVINCE_LEGAL, ROUTE_SLAUGHTER_MANAGE_STEWARDS_OUT_PROVINCE_LEGAL,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_GUILDS_REQUESTS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_TRUE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_LEGAL,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_LEGAL,
} from "./routes"; } from "./routes";
const TradePanel = lazy(() => lazyRetry(() => import("../pages/TradePanel"))); const TradePanel = lazy(() => lazyRetry(() => import("../pages/TradePanel")));
@@ -266,7 +273,16 @@ export const slaughterRouting = [
props: {}, props: {},
}, },
{ {
path: [ROUTE_SLAUGHTER_ROUTE_MANAGE_GUILDS], path: [
ROUTE_SLAUGHTER_ROUTE_MANAGE_GUILDS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_GUILDS_REQUESTS,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_TRUE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_IN_PROVINCE_LEGAL,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_TRUE,
ROUTE_SLAUGHTER_MANAGE_GUILDS_OUT_PROVINCE_LEGAL,
],
Page: Guilds, Page: Guilds,
exact: false, exact: false,
props: {}, props: {},