fixed form for create guilds basiclly

This commit is contained in:
2026-01-26 15:22:33 +03:30
parent eed6904646
commit 66d71c9c25
12 changed files with 536 additions and 123 deletions

13
.vscode/settings.json vendored
View File

@@ -1,3 +1,14 @@
{
"workbench.editor.enablePreviewFromCodeNavigation": true
"workbench.editor.enablePreviewFromCodeNavigation": true,
"launch": {
"configurations": [],
"compounds": []
},
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint",
"editor.formatOnSave": true,
"notebook.defaultFormatter": "rvest.vs-code-prettier-eslint",
"notebook.formatOnSave.enabled": true,
"[javascript]": {
"editor.defaultFormatter": "rvest.vs-code-prettier-eslint"
}
}

View File

@@ -22,6 +22,8 @@ import { provinceGetFieldOfWorks } from "../../services/ProvinceGetFieldOfWorks"
import { provinceGetTypeActivity } from "../../services/provinceGetTypeActivity";
import { provinceGetRegisterCodeStateService } from "../../services/province-get-register-code-state";
import { mainGetGuildsForUpdateOrCreateService } from "../../services/main-get-guilds-for-update-or-create";
import { cityGetProvinces } from "../../../city/services/CityGetProvinces";
import { cityGetCity } from "../../../city/services/city-get-city";
import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl";
import { PersonalInfoSection } from "./components/PersonalInfoSection";
import { InquiryForm } from "./components/InquiryForm";
@@ -87,6 +89,8 @@ export const CreateGuilds = ({ guild, updateTable }) => {
return [];
});
const [cities, setCities] = useState([]);
const [provinces, setProvinces] = useState([]);
const [provinceCities, setProvinceCities] = useState([]);
const [typeActivities, setTypeActivities] = useState([]);
const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
const [deleteDialogIndex, setDeleteDialogIndex] = useState(null);
@@ -109,6 +113,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
const combinedValues = {
...values, // Personal info (shared)
...guildValues, // Guild-specific info (overrides if same keys exist)
national_id: values?.national_id,
};
return prepareSubmitData(
combinedValues,
@@ -117,7 +122,7 @@ export const CreateGuilds = ({ guild, updateTable }) => {
hasInquiry
);
});
console.log(guildsDataArray);
dispatch(updateGuildByNationalIdNewService(guildsDataArray)).then(
(result) => {
if (result.payload.error) {
@@ -151,12 +156,78 @@ export const CreateGuilds = ({ guild, updateTable }) => {
dispatch(provinceGetTypeActivity()).then((r) => {
setTypeActivities(r.payload.data || []);
});
// Fetch provinces for province/city selection
dispatch(cityGetProvinces()).then((r) => {
if (r?.payload?.data) {
setProvinces(r.payload.data);
}
});
}, []);
useEffect(() => {
// Initialize Formik's guilds array if we have initial guild data
if (guild && guildsList.length > 0) {
const guildsForFormik = guildsList.map((guildItem) => {
const combinedGuild = {
...guildItem,
user: guild?.user || {},
};
const initialValues = getInitialValues(combinedGuild);
return {
steward: initialValues.steward || false,
guild: initialValues.guild || false,
};
});
formik.setFieldValue("guilds", guildsForFormik, false).then(() => {
formik.validateField("guilds");
});
}
formik.validateForm();
}, []);
// Set province ID from state name when provinces are loaded
useEffect(() => {
if (
formik.values.state &&
provinces.length > 0 &&
!formik.values.province
) {
const province = provinces.find((p) => p.name === formik.values.state);
if (province) {
formik.setFieldValue("province", province.key);
}
}
}, [provinces, formik.values.state, formik.values.province]);
// Fetch cities when province is selected
useEffect(() => {
if (formik.values.province) {
dispatch(cityGetCity(formik.values.province)).then((r) => {
if (r?.payload?.data) {
setProvinceCities(r.payload.data);
}
});
} else {
setProvinceCities([]);
}
}, [formik.values.province, dispatch]);
// Set city ID from person_city name when provinceCities are loaded
useEffect(() => {
if (
formik.values.person_city &&
!formik.values.city &&
provinceCities.length > 0
) {
const city = provinceCities.find(
(c) => c.name === formik.values.person_city
);
if (city) {
formik.setFieldValue("city", city.key);
}
}
}, [provinceCities, formik.values.person_city, formik.values.city]);
const mapResponseToFormFields = useCallback(
(responseData) => {
const guildsData = Array.isArray(responseData.guilds)
@@ -187,10 +258,34 @@ export const CreateGuilds = ({ guild, updateTable }) => {
return getInitialValues(combinedGuild);
});
setGuildsFormValues(initialGuildValues);
// Update Formik's guilds array for validation
const guildsForFormik = guildsData.map((guildItem) => ({
steward:
typeof guildItem?.steward === "boolean"
? guildItem.steward
: typeof guildItem?.isSteward === "boolean"
? guildItem.isSteward
: false,
guild:
typeof guildItem?.guild === "boolean"
? guildItem.guild
: typeof guildItem?.isGuild === "boolean"
? guildItem.isGuild
: false,
}));
formik.setFieldValue("guilds", guildsForFormik, true).then(() => {
formik.validateField("guilds");
});
setExpandedAccordion(0);
} else {
setGuildsList([]);
setGuildsFormValues([]);
formik.setFieldValue("guilds", [], true).then(() => {
formik.validateField("guilds");
});
}
setTimeout(() => {
@@ -333,6 +428,19 @@ export const CreateGuilds = ({ guild, updateTable }) => {
const newIndex = guildsList.length;
setGuildsList([...guildsList, null]);
setGuildsFormValues([...guildsFormValues, getInitialValues(null)]);
// Add to Formik's guilds array for validation
const currentGuilds = formik.values.guilds || [];
formik
.setFieldValue(
"guilds",
[...currentGuilds, { steward: false, guild: false }],
true
)
.then(() => {
formik.validateField("guilds");
});
setExpandedAccordion(newIndex);
};
@@ -346,6 +454,19 @@ export const CreateGuilds = ({ guild, updateTable }) => {
if (guildsList.length > 1) {
setGuildsList(guildsList.filter((_, i) => i !== index));
setGuildsFormValues(guildsFormValues.filter((_, i) => i !== index));
// Remove from Formik's guilds array
const currentGuilds = formik.values.guilds || [];
formik
.setFieldValue(
"guilds",
currentGuilds.filter((_, i) => i !== index),
true
)
.then(() => {
formik.validateField("guilds");
});
if (expandedAccordion === index) {
setExpandedAccordion(0);
} else if (expandedAccordion > index) {
@@ -386,6 +507,19 @@ export const CreateGuilds = ({ guild, updateTable }) => {
setGuildsFormValues(
guildsFormValues.filter((_, i) => i !== deleteDialogIndex)
);
// Remove from Formik's guilds array
const currentGuilds = formik.values.guilds || [];
formik
.setFieldValue(
"guilds",
currentGuilds.filter((_, i) => i !== deleteDialogIndex),
true
)
.then(() => {
formik.validateField("guilds");
});
// If deleted accordion was expanded, expand the first one
if (expandedAccordion === deleteDialogIndex) {
setExpandedAccordion(0);
@@ -408,7 +542,8 @@ export const CreateGuilds = ({ guild, updateTable }) => {
}
};
const handleGuildValuesChange = useCallback((index, fieldName, value) => {
const handleGuildValuesChange = useCallback(
(index, fieldName, value) => {
setGuildsFormValues((prev) => {
const newValues = [...prev];
if (!newValues[index]) {
@@ -420,7 +555,25 @@ export const CreateGuilds = ({ guild, updateTable }) => {
};
return newValues;
});
}, []);
// Sync with Formik's guilds array for steward and guild fields
if (fieldName === "steward" || fieldName === "guild") {
const currentGuilds = formik.values.guilds || [];
const updatedGuilds = [...currentGuilds];
if (!updatedGuilds[index]) {
updatedGuilds[index] = { steward: false, guild: false };
}
updatedGuilds[index] = {
...updatedGuilds[index],
[fieldName]: value,
};
formik.setFieldValue("guilds", updatedGuilds, true).then(() => {
formik.validateField("guilds");
});
}
},
[formik]
);
const handleAccordionChange = (index) => (event, isExpanded) => {
setExpandedAccordion(isExpanded ? index : false);
@@ -438,6 +591,8 @@ export const CreateGuilds = ({ guild, updateTable }) => {
const shouldShowInquiryForm = !guild && !isInquiryDone;
const shouldShowFormContent = guild || isInquiryDone;
console.log(formik.errors);
return (
<form onSubmit={formik.handleSubmit}>
<Grid
@@ -483,6 +638,9 @@ export const CreateGuilds = ({ guild, updateTable }) => {
isAdmin={isAdmin}
isSuperAdmin={isSuperAdmin}
isKillHouse={isKillHouse}
provinces={provinces}
provinceCities={provinceCities}
guildsList={guildsList}
/>
<Grid
@@ -507,7 +665,10 @@ export const CreateGuilds = ({ guild, updateTable }) => {
guildData={guildItem}
guildActive={guildActive}
isAdmin={isAdmin}
cities={cities}
isSuperAdmin={isSuperAdmin}
cities={
provinceCities.length > 0 ? provinceCities : cities
}
typeActivities={typeActivities}
onDelete={() => handleDeleteGuild(index)}
canDelete={
@@ -561,6 +722,18 @@ export const CreateGuilds = ({ guild, updateTable }) => {
!isSuperAdmin &&
!isKillHouse
}
formData={guildsList.map((guildItem, index) => {
const guildValues = guildsFormValues[index];
const combinedValues = {
...guildValues, // Guild-specific info (overrides if same keys exist)
};
return prepareSubmitData(
combinedValues,
guildItem,
originalPhoneNumber,
hasInquiry
);
})}
isKillHouse={isKillHouse}
onSubmit={formik.handleSubmit}
/>

View File

@@ -19,11 +19,14 @@ export const FormActions = ({
);
}
// For KillHouse: check if area_activity contains "مرغ"
const isAreaActivityValid = isKillHouse
? formik.values.area_activity && formik.values.area_activity.includes("مرغ")
: true;
// Check if guilds validation has errors
const hasGuildsError = formik.errors.guilds;
const hasGuilds = formik.values.guilds && formik.values.guilds.length > 0;
return (
<>
<Grid item xs={12}>
@@ -44,7 +47,9 @@ export const FormActions = ({
disabled={
formik.errors.isAccepted ||
Boolean(formik.errors.national_id) ||
!isAreaActivityValid
!isAreaActivityValid ||
hasGuildsError ||
!hasGuilds
}
color="primary"
fullWidth
@@ -63,6 +68,15 @@ export const FormActions = ({
رسته واحد صنفی باید شامل کلمه &quot;مرغ&quot; باشد
</Typography>
)}
{hasGuildsError && (
<Typography
variant="caption"
color="error"
sx={{ mt: 1, display: "block" }}
>
{formik.errors.guilds}
</Typography>
)}
</Grid>
</>
);

View File

@@ -17,6 +17,7 @@ export const GuildInfoAccordionItem = ({
guildData,
guildActive,
isAdmin,
isSuperAdmin,
cities,
typeActivities,
onDelete,
@@ -86,6 +87,7 @@ export const GuildInfoAccordionItem = ({
guild={guildData}
guildActive={guildActive}
isAdmin={isAdmin}
isSuperAdmin={isSuperAdmin}
cities={cities}
typeActivities={typeActivities}
hideTitle={true}

View File

@@ -10,6 +10,7 @@ import {
MenuItem,
InputLabel,
Checkbox,
Autocomplete,
} from "@mui/material";
import { DatePicker } from "@mui/x-date-pickers";
import moment from "moment";
@@ -40,6 +41,7 @@ export const GuildInfoSection = ({
guild,
guildActive,
isAdmin,
isSuperAdmin,
cities,
typeActivities,
hideTitle = false,
@@ -81,7 +83,7 @@ export const GuildInfoSection = ({
xs={12}
md={6}
px={SPACING.TINY}
gap={SPACING.TINY}
gap={SPACING.SMALL}
>
<Grid item xs={12}>
{isAdmin ? (
@@ -150,60 +152,47 @@ export const GuildInfoSection = ({
</Grid>
<Grid item xs={12}>
{isAdmin ? (
<TextField
label="استان"
variant="outlined"
fullWidth
id="state"
name="state"
value={formik.values.state}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
/>
) : (
<InfoBox
icon={PublicIcon}
label="استان"
value={formik.values.state}
/>
)}
</Grid>
<Grid item xs={12}>
{isAdmin ? (
<FormControl fullWidth>
<InputLabel id="city-select-label">شهرستان</InputLabel>
<Select
labelId="city-select-label"
id="city"
name="city"
value={formik.values.city || ""}
label="شهرستان"
onChange={(e) => {
formik.setFieldValue("city", e.target.value);
<Autocomplete
size="small"
style={{ width: "100%" }}
disablePortal
id="city_name"
disabled={!cities || cities.length === 0}
options={
cities
? cities.map((i) => ({
id: i.key,
label: i.name,
}))
: []
}
value={
cities.find((c) => c.name === formik.values.city_name)
? {
id: cities.find(
(c) => c.name === formik.values.city_name
)?.key,
label: formik.values.city_name,
}
: formik.values.city_name
? {
id: null,
label: formik.values.city_name,
}
: null
}
onChange={(e, value) => {
formik.setFieldValue("city_name", value ? value.label : "");
}}
onBlur={formik.handleBlur}
>
{cities.map((city) => (
<MenuItem key={city.key} value={city.name}>
{city.name}
</MenuItem>
))}
{/* Show current value if it doesn't exist in options */}
{formik.values.city &&
!cities.some(
(city) => city.name === formik.values.city
) && (
<MenuItem key="current-value" value={formik.values.city}>
{formik.values.city}
</MenuItem>
renderInput={(params) => (
<TextField {...params} label="شهرستان" />
)}
</Select>
</FormControl>
/>
) : (
<InfoBox
icon={LocationCityIcon}
label="شهرستان"
value={formik.values.city}
value={formik.values.city_name}
/>
)}
</Grid>
@@ -332,7 +321,7 @@ export const GuildInfoSection = ({
md={6}
px={SPACING.TINY}
direction="column"
gap={SPACING.TINY}
gap={SPACING.SMALL}
>
<Grid item xs={12}>
{isAdmin ? (
@@ -345,6 +334,8 @@ export const GuildInfoSection = ({
value={formik.values.postal_code}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
error={Boolean(formik.errors.postal_code)}
helperText={formik.errors.postal_code}
/>
) : (
<InfoBox
@@ -365,6 +356,13 @@ export const GuildInfoSection = ({
value={formik.values.phone_number}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
error={
formik.touched.phone_number &&
Boolean(formik.errors.phone_number)
}
helperText={
formik.touched.phone_number && formik.errors.phone_number
}
/>
) : (
<InfoBox
@@ -505,7 +503,7 @@ export const GuildInfoSection = ({
</Grid>
</Grid>
<Grid item xs={12} sx={{ display: "flex", mt: 2, pl: 2, mb: 2 }}>
{isAdmin ? (
{isAdmin || isSuperAdmin ? (
<>
<FormControlLabel
control={

View File

@@ -6,6 +6,7 @@ import {
FormControl,
Radio,
FormControlLabel,
Autocomplete,
} from "@mui/material";
import { DatePicker } from "@mui/x-date-pickers";
import moment from "moment";
@@ -16,6 +17,7 @@ import CakeIcon from "@mui/icons-material/Cake";
import FaceIcon from "@mui/icons-material/Face";
import LocationCityIcon from "@mui/icons-material/LocationCity";
import FavoriteIcon from "@mui/icons-material/Favorite";
import PublicIcon from "@mui/icons-material/Public";
import { Grid } from "../../../../../components/grid/Grid";
import { SPACING } from "../../../../../data/spacing";
import { LabelField } from "../../../../../components/label-field/LabelField";
@@ -33,6 +35,8 @@ export const PersonalInfoSection = ({
isAdmin,
isSuperAdmin,
isKillHouse,
provinces = [],
provinceCities = [],
}) => {
const getGenderDisplay = (gender) => {
if (gender === "True" || gender === true) return GENDER_VALUES.MALE;
@@ -305,21 +309,106 @@ export const PersonalInfoSection = ({
</Grid>
<Grid item xs={12}>
{isAdmin ? (
<TextField
label="شهر"
variant="outlined"
fullWidth
id="person_city"
name="person_city"
value={formik.values.person_city}
onChange={formik.handleChange}
onBlur={formik.handleBlur}
<Autocomplete
size="small"
style={{ width: "100%" }}
disablePortal
id="province"
options={
provinces
? provinces.map((i) => ({
id: i.key,
label: i.name,
}))
: []
}
value={
provinces.find((p) => p.key === formik.values.province)
? {
id: formik.values.province,
label:
provinces.find(
(p) => p.key === formik.values.province
)?.name || "",
}
: null
}
onChange={(e, value) => {
formik.setFieldValue("province", value ? value.id : "");
formik.setFieldValue("city", "");
formik.setFieldValue("person_city", "");
}}
disabled={guild}
renderInput={(params) => (
<TextField {...params} label="استان" />
)}
/>
) : (
<InfoBox
icon={PublicIcon}
label="استان"
value={
provinces.find((p) => p.key === formik.values.province)
?.name ||
formik.values.state ||
"-"
}
/>
)}
</Grid>
<Grid item xs={12}>
{isAdmin ? (
<Autocomplete
size="small"
style={{ width: "100%" }}
disablePortal
id="city"
disabled={!formik.values.province}
options={
provinceCities
? provinceCities.map((i) => ({
id: i.key,
label: i.name,
}))
: []
}
value={
provinceCities.find((c) => c.key === formik.values.city)
? {
id: formik.values.city,
label:
provinceCities.find(
(c) => c.key === formik.values.city
)?.name || "",
}
: formik.values.person_city
? {
id: null,
label: formik.values.person_city,
}
: null
}
onChange={(e, value) => {
formik.setFieldValue("city", value ? value.id : "");
formik.setFieldValue(
"person_city",
value ? value.label : ""
);
}}
renderInput={(params) => (
<TextField {...params} label="شهر" />
)}
/>
) : (
<InfoBox
icon={LocationCityIcon}
label="شهر"
value={formik.values.person_city}
value={
provinceCities.find((c) => c.key === formik.values.city)
?.name ||
formik.values.person_city ||
"-"
}
/>
)}
</Grid>

View File

@@ -25,7 +25,12 @@ export const prepareSubmitData = (
values.birth_date || "",
hasInquiry === true
),
city: values.city || "",
// city is for user info (personal info) - use person_city from personal info
city: values.person_city || values.city || "",
// city_name is for guild info
city_name: values.city_name || "",
// province is stored as ID when selected, or as name from state field
province: values.province || "",
address: values.address || "",
postalcode: values.postal_code || "",
licenseNumber: values.license_number || "",
@@ -177,7 +182,8 @@ export const mapResponseDataToFormFields = (
? guildData.isicname || ""
: firstGuild.areaActivity || "",
state: isExternalApi ? guildData.state || "" : provinceData.name || "",
city: isExternalApi ? guildData.city || "" : cityData.name || "",
province: isExternalApi ? "" : provinceData.key || "",
city: isExternalApi ? guildData.city || "" : cityData.key || "",
address: isExternalApi
? guildData.address || ""
: addressData.address || "",

View File

@@ -43,6 +43,27 @@ export const getValidationSchema = (isEditMode) =>
return val === true;
})
.required("این فیلد اجباری است!"),
guilds: yup
.array()
.min(1, "حداقل یک واحد صنفی باید وجود داشته باشد")
.of(
yup.object({
steward: yup.boolean().default(false),
guild: yup.boolean().default(false),
})
)
.test(
"steward-guild-required",
"برای هر واحد صنفی، حداقل یکی از گزینه‌های مباشر یا صنف باید انتخاب شود",
function (guilds) {
if (!guilds || guilds.length === 0) {
return false;
}
return guilds.every(
(guild) => guild?.steward === true || guild?.guild === true
);
}
),
});
export const getInitialValues = (guild) => ({
@@ -56,10 +77,11 @@ export const getInitialValues = (guild) => ({
gender: guild?.user?.gender || "",
person_city: guild?.user?.city || "",
is_alive: guild?.user?.isAlive || "",
guild_name: guild?.guildsName || "",
guild_name: guild?.guildsName || guild?.name || "",
area_activity: guild?.areaActivity || "",
state: guild?.address?.province?.name || "",
city: guild?.address?.city?.name || "",
province: guild?.address?.province?.key || "",
city_name: guild?.address?.city?.name || "",
address: guild?.address?.address || "",
license_expire_date: normalizeDatabaseDate(guild?.licenseExpireDate || ""),
license_status: guild?.licenseStatus || "",
@@ -92,4 +114,22 @@ export const getInitialValues = (guild) => ({
company_identifier: guild?.companyIdentifier || "",
type_activity_name: guild?.typeActivityName || "",
active: guild?.active ?? null,
guilds: guild
? [
{
steward:
typeof guild?.steward === "boolean"
? guild.steward
: typeof guild?.isSteward === "boolean"
? guild.isSteward
: false,
guild:
typeof guild?.guild === "boolean"
? guild.guild
: typeof guild?.isGuild === "boolean"
? guild.isGuild
: false,
},
]
: [],
});

View File

@@ -1,8 +1,9 @@
import React, { useEffect, useState } from "react";
import { Button, TextField } from "@mui/material";
import { Button, TextField, Typography } from "@mui/material";
import { useDispatch } from "react-redux";
import { RiSearchLine } from "react-icons/ri";
import {
CLOSE_MODAL,
LOADING_END,
LOADING_START,
OPEN_MODAL,
@@ -14,6 +15,8 @@ import { ManageGuildsRequestsOperations } from "../manage-guilds-requests-operat
import { CreateGuilds } from "../create-guilds/CreateGuilds";
import { provinceGetTotalGuildsService } from "../../services/province-get-total-guilds";
import { provinceGetTotalStewardsService } from "../../services/province-get-total-stewards";
import { formatTime } from "../../../../utils/formatTime";
import { ProvinceLegalGuildsForm } from "../province-legal-guilds-in-province/ProvinceLegalGuildsForm";
export const ManageGuildsRequests = ({ userType }) => {
const IS_STEWARD = userType === "steward";
@@ -76,6 +79,7 @@ export const ManageGuildsRequests = ({ userType }) => {
const d = data?.map((item, i) => {
return [
page === 1 ? i + 1 : i + perPage * (page - 1) + 1,
formatTime(item?.createDate) || "-",
`${item?.registerarFullname || ""} ${
item?.registerarMobile ? "(" + item?.registerarMobile + " )" : " "
}`,
@@ -130,7 +134,9 @@ export const ManageGuildsRequests = ({ userType }) => {
dispatch(LOADING_END());
}
};
{
/* */
}
return (
<Grid container xs={12} justifyContent="center" alignItems="center" gap={2}>
<Grid
@@ -148,12 +154,71 @@ export const ManageGuildsRequests = ({ userType }) => {
OPEN_MODAL({
title: `ثبت ${IS_STEWARD ? "مباشر" : "صنف"} جدید`,
size: window.innerWidth <= 600 ? "small" : "auto",
content: <CreateGuilds updateTable={updateTable} />,
content: (
<Grid container>
<Grid xs={12} mb={2}>
<Typography>{`نوع ${
IS_STEWARD ? "مباشر" : "صنف"
}:`}</Typography>
</Grid>
<Grid container justifyContent="flex-end" gap={1} xs={12}>
<Button
variant="contained"
color="primary"
onClick={() => {
dispatch(CLOSE_MODAL());
dispatch(
OPEN_MODAL({
title: `ثبت ${
IS_STEWARD ? "مباشر" : "صنف"
} حقیقی جدید`,
size:
window.innerWidth <= 600 ? "small" : "auto",
content: (
<CreateGuilds updateTable={updateTable} />
),
})
);
}}
style={{ flex: 1 }}
>
حقیقی
</Button>
<Button
style={{ flex: 1 }}
variant="outlined"
color="primary"
onClick={() => {
dispatch(CLOSE_MODAL());
dispatch(
OPEN_MODAL({
title: `ثبت ${
IS_STEWARD
? "مباشر حقوقی جدید"
: "صنف حقوقی جدید"
}`,
content: (
<ProvinceLegalGuildsForm
onClose={() => dispatch(CLOSE_MODAL())}
updateTable={updateTable}
userType={userType}
/>
),
size: 400,
})
);
}}
>
{`ثبت ${IS_STEWARD ? "مباشر" : "صنف"} جدید`}
حقوقی
</Button>
</Grid>
</Grid>
),
})
);
}}
>
{`ثبت ${IS_STEWARD ? "مباشر" : "صنف"}`}
</Button>
)}
@@ -182,6 +247,7 @@ export const ManageGuildsRequests = ({ userType }) => {
data={tableData}
columns={[
"ردیف",
"تاریخ ثبت",
"ثبت کننده",
`شناسه ${IS_STEWARD ? "مباشر" : "صنف"}`,
`نام ${IS_STEWARD ? "مباشر" : "واحد صنفی"}`,

View File

@@ -14,6 +14,7 @@ import { SimpleTable } from "../../../../components/simple-table/SimpleTable";
import { CreateGuilds } from "../create-guilds/CreateGuilds";
import { checkPathStartsWith } from "../../../../utils/checkPathStartsWith";
import { provinceGetTotalStewardsService } from "../../services/province-get-total-stewards";
import { formatTime } from "../../../../utils/formatTime";
export const ManageGuilds = ({ userType }) => {
const IS_STEWARD = userType === "steward";
@@ -100,6 +101,10 @@ export const ManageGuilds = ({ userType }) => {
const d = data.map((item, i) => {
const commonData = [
page === 1 ? i + 1 : i + perPage * (page - 1) + 1,
formatTime(item?.createDate) || "-",
`${item?.registerarFullname || ""} ${
item?.registerarMobile ? "(" + item?.registerarMobile + " )" : " "
}`,
item?.licenseNumber || "-",
(IS_STEWARD ? item?.name : item?.guildsName) || "-",
`${item?.user?.fullname || "-"} (${item?.user?.mobile || "-"})`,
@@ -268,7 +273,6 @@ export const ManageGuilds = ({ userType }) => {
>
<form onSubmit={handleSubmit}>
<Grid container alignItems="center" gap={SPACING.SMALL}>
{["KillHouse", "GuildRoom"].includes(getRoleFromUrl()) && (
<Button
variant="contained"
onClick={() => {
@@ -283,9 +287,8 @@ export const ManageGuilds = ({ userType }) => {
);
}}
>
{`ثبت ${IS_STEWARD ? "مباشر" : "صنف"} جدید`}
{`ثبت ${IS_STEWARD ? "مباشر" : "صنف"}`}
</Button>
)}
<TextField
size="small"
@@ -360,6 +363,8 @@ export const ManageGuilds = ({ userType }) => {
getRoleFromUrl() === "CityJahad" || getRoleFromUrl() === "CityPoultry"
? [
"ردیف",
"تاریخ ثبت",
"ثبت کننده",
IS_STEWARD ? "شناسه مباشر" : "شناسه صنف",
"نام واحد صنفی",
"نام شخص/شرکت",
@@ -381,6 +386,8 @@ export const ManageGuilds = ({ userType }) => {
: getRoleFromUrl() === "KillHouse"
? [
"ردیف",
"تاریخ ثبت",
"ثبت کننده",
IS_STEWARD ? "شناسه مباشر" : "شناسه صنف",
"نام واحد صنفی",
"نام شخص/شرکت",
@@ -400,6 +407,8 @@ export const ManageGuilds = ({ userType }) => {
]
: [
"ردیف",
"تاریخ ثبت",
"ثبت کننده",
IS_STEWARD ? "شناسه مباشر" : "شناسه صنف",
"نام واحد صنفی",
"نام شخص/شرکت",

View File

@@ -90,30 +90,27 @@ const InfoBox = ({ icon: Icon, label, value, iconSx }) => (
</Box>
);
const getValidationSchema = (isAdmin, userFound) =>
const getValidationSchema = () =>
yup.object({
national_id: yup
.string()
.required("شناسه حقوقی الزامی است")
.matches(/^[0-9]{11}$/, "شناسه حقوقی باید 11 رقم باشد"),
first_name: yup.string(),
last_name: yup.string(),
first_name: yup.string().required("نام اجباری است."),
last_name: yup.string().required("نام خانوادگی اجباری است."),
unit_name: yup.string(),
name: yup.string(),
province: yup.string(),
city: yup.string(),
mobile:
isAdmin || !userFound
? yup
mobile: yup
.string()
.nullable()
.test(
"mobile-format",
"شماره تلفن باید 11 رقم باشد",
(value) => !value || /^[0-9]{11}$/.test(value)
)
: yup.string(),
type_activity: yup.string(),
.required("شماره موبایل اجباری است."),
type_activity: yup.string().required("نوع فعالیت اجباری است."),
});
const LegalGuildForm = ({
@@ -125,7 +122,7 @@ const LegalGuildForm = ({
cities,
}) => {
const IS_STEWARD = userType === "steward";
const IS_ADMIN = getRoleFromUrl() === "AdminX";
return (
<form onSubmit={formik.handleSubmit}>
<Grid container gap={SPACING.SMALL} p={2}>
@@ -146,7 +143,7 @@ const LegalGuildForm = ({
error={Boolean(formik.errors.national_id)}
helperText={formik.errors.national_id}
inputProps={{ maxLength: 11 }}
disabled={true}
disabled={!IS_ADMIN}
/>
) : (
<InfoBox
@@ -583,8 +580,9 @@ export const ProvinceLegalGuildsForm = ({
const formik = useFormik({
initialValues: formikIntitialValues,
validationSchema: getValidationSchema(isAdmin, userFound, userType),
validationSchema: getValidationSchema(),
enableReinitialize: true,
validateOnMount: true,
onSubmit: (values) => {
// Find type_activity key from the title
const typeActivityObj = typeActivities.find(

View File

@@ -11,6 +11,7 @@ import ResponsiveTable from "../../../../components/responsive-table/ResponsiveT
import { RiSearchLine } from "react-icons/ri";
import { provinceGetTotalStewardsService } from "../../services/province-get-total-stewards";
import { checkPathStartsWith } from "../../../../utils/checkPathStartsWith";
import { formatTime } from "../../../../utils/formatTime";
export const ProvinceLegalGuildsInProvince = ({ userType }) => {
const IS_STEWARD = userType === "steward";
@@ -85,6 +86,10 @@ export const ProvinceLegalGuildsInProvince = ({ userType }) => {
const d = data.map((item, i) => {
return [
page === 1 ? i + 1 : i + perPage * (page - 1) + 1,
formatTime(item?.createDate) || "-",
`${item?.registerarFullname || ""} ${
item?.registerarMobile ? "(" + item?.registerarMobile + " )" : " "
}`,
(IS_STEWARD ? item?.licenseNumber : item?.nationalId) || "-",
(IS_STEWARD ? item?.name : item?.guildsName) || "-",
`${item?.user?.fullname || "-"}`,
@@ -195,6 +200,8 @@ export const ProvinceLegalGuildsInProvince = ({ userType }) => {
title={TABLE_TITLE}
columns={[
"ردیف",
"تاریخ ثبت",
"ثبت کننده",
"شناسه حقوقی",
"نام واحد",
"نام و نام خانوادگی",