692 lines
25 KiB
JavaScript
692 lines
25 KiB
JavaScript
|
|
import {
|
|||
|
|
Button,
|
|||
|
|
IconButton,
|
|||
|
|
TextField,
|
|||
|
|
Tooltip,
|
|||
|
|
Typography,
|
|||
|
|
} from "@mui/material";
|
|||
|
|
import axios from "axios";
|
|||
|
|
import { useContext, useEffect, useState } from "react";
|
|||
|
|
import { RiFileExcel2Fill, RiSearchLine } from "react-icons/ri";
|
|||
|
|
import { Grid } from "../../../../components/grid/Grid";
|
|||
|
|
import { SPACING } from "../../../../data/spacing";
|
|||
|
|
import { formatTime, formatJustDate } from "../../../../utils/formatTime";
|
|||
|
|
import { getFaUserRole } from "../../../../utils/getFaUserRole";
|
|||
|
|
import { getRoleFromUrl } from "../../../../utils/getRoleFromUrl";
|
|||
|
|
import { CityManageHatchingsArchiveActions } from "../city-manage-hatchings-operations/CityManageHatchingsOperations";
|
|||
|
|
import { useDispatch, useSelector } from "react-redux";
|
|||
|
|
import { AppContext } from "../../../../contexts/AppContext";
|
|||
|
|
import { cityGetHatchingInfoFull } from "../../services/city-get-hatching-info-full";
|
|||
|
|
import ResponsiveTable from "../../../../components/responsive-table/ResponsiveTable";
|
|||
|
|
import {
|
|||
|
|
// DRAWER,
|
|||
|
|
LOADING_END,
|
|||
|
|
LOADING_START,
|
|||
|
|
OPEN_MODAL,
|
|||
|
|
} from "../../../../lib/redux/slices/appSlice";
|
|||
|
|
import { SimpleTable } from "../../../../components/simple-table/SimpleTable";
|
|||
|
|
import ShowImage from "../../../../components/show-image/ShowImage";
|
|||
|
|
import RemoveRedEyeIcon from "@mui/icons-material/RemoveRedEye";
|
|||
|
|
import ArticleIcon from "@mui/icons-material/Article";
|
|||
|
|
import {
|
|||
|
|
ROUTE_ADMINXـHATCHINGS,
|
|||
|
|
ROUTE_CITY_JIHADـHATCHINGS,
|
|||
|
|
ROUTE_CITY_POULTRYـHATCHINGS,
|
|||
|
|
ROUTE_PROVINCE_SUPERVISORـHATCHINGS,
|
|||
|
|
ROUTE_PROVINCEـHATCHINGS,
|
|||
|
|
ROUTE_SUPER_ADMINـHATCHINGS,
|
|||
|
|
ROUTE_SUPPORTERـHATCHINGS,
|
|||
|
|
} from "../../../../routes/routes";
|
|||
|
|
import { useNavigate } from "react-router-dom";
|
|||
|
|
|
|||
|
|
// import { CityHatchingShowTableDetail } from "../city-hatching-show-table-detail/CityHatchingShowTableDetail";
|
|||
|
|
|
|||
|
|
export const CityHatchingUnassigned = ({ readOnly }) => {
|
|||
|
|
const dispatch = useDispatch();
|
|||
|
|
|
|||
|
|
const isReadOnly = readOnly || false;
|
|||
|
|
const [selectedAge1, setSelectedAge1] = useState(0);
|
|||
|
|
const [selectedAge2, setSelectedAge2] = useState(0);
|
|||
|
|
const [data, setData] = useState([]);
|
|||
|
|
const [totalRows, setTotalRows] = useState(0);
|
|||
|
|
const [perPage, setPerPage] = useState(10);
|
|||
|
|
const [textValue, setTextValue] = useState("");
|
|||
|
|
const [page, setPage] = useState(1);
|
|||
|
|
const [tableData, setTableData] = useState([]);
|
|||
|
|
const userKey = useSelector((state) => state.userSlice.userProfile.key);
|
|||
|
|
const navigate = useNavigate();
|
|||
|
|
|
|||
|
|
const [openNotif] = useContext(AppContext);
|
|||
|
|
|
|||
|
|
const handleTextChange = (event) => {
|
|||
|
|
setTextValue(event.target.value);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const hatchingAdded = useSelector((state) => state.citySlice.hatchingAdded);
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
fetchApiData();
|
|||
|
|
}, [hatchingAdded]);
|
|||
|
|
|
|||
|
|
const fetchApiData = async (pageParam = page, perPageParam = perPage) => {
|
|||
|
|
dispatch(LOADING_START());
|
|||
|
|
const response = await axios.get("poultry_hatching/", {
|
|||
|
|
params: {
|
|||
|
|
unknown: true,
|
|||
|
|
search: "filter",
|
|||
|
|
value: textValue,
|
|||
|
|
role: getRoleFromUrl(),
|
|||
|
|
page: pageParam,
|
|||
|
|
page_size: perPageParam,
|
|||
|
|
age1: selectedAge1 || 0,
|
|||
|
|
age2: selectedAge2 || 0,
|
|||
|
|
},
|
|||
|
|
});
|
|||
|
|
dispatch(LOADING_END());
|
|||
|
|
setData(response.data.results);
|
|||
|
|
setTotalRows(response.data.count);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const handlePageChange = (page) => {
|
|||
|
|
setPage(page);
|
|||
|
|
fetchApiData(page, perPage);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const handlePerRowsChange = (perRows) => {
|
|||
|
|
setPerPage(perRows);
|
|||
|
|
setPage(1);
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
fetchApiData();
|
|||
|
|
}, [perPage]);
|
|||
|
|
|
|||
|
|
const updateTable = () => {
|
|||
|
|
fetchApiData();
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// const killedNumber = (item) => {
|
|||
|
|
// let killedNumber = "";
|
|||
|
|
// killedNumber = item.quantity - item.losses - item.leftOver;
|
|||
|
|
// return killedNumber;
|
|||
|
|
// };
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
const d = data?.map((item, i) => {
|
|||
|
|
return [
|
|||
|
|
<CityManageHatchingsArchiveActions
|
|||
|
|
selectedAge1={null}
|
|||
|
|
selectedAge2={null}
|
|||
|
|
updateTable={updateTable}
|
|||
|
|
item={item}
|
|||
|
|
key={"archive-actions"}
|
|||
|
|
readOnly={isReadOnly}
|
|||
|
|
/>,
|
|||
|
|
<Tooltip placement="left" title="جزئیات جوجه ریزی" key={item?.key}>
|
|||
|
|
<IconButton
|
|||
|
|
color="primary"
|
|||
|
|
onClick={() => {
|
|||
|
|
navigate(
|
|||
|
|
getRoleFromUrl() === "AdminX"
|
|||
|
|
? `${ROUTE_ADMINXـHATCHINGS}/${item.key}`
|
|||
|
|
: getRoleFromUrl() === "Supporter"
|
|||
|
|
? `${ROUTE_SUPPORTERـHATCHINGS}/${item.key}`
|
|||
|
|
: getRoleFromUrl() === "SuperAdmin"
|
|||
|
|
? `${ROUTE_SUPER_ADMINـHATCHINGS}/${item.key}`
|
|||
|
|
: getRoleFromUrl() === "CityPoultry"
|
|||
|
|
? `${ROUTE_CITY_POULTRYـHATCHINGS}/${item.key}`
|
|||
|
|
: getRoleFromUrl() === "ProvinceSupervisor"
|
|||
|
|
? `${ROUTE_PROVINCE_SUPERVISORـHATCHINGS}/${item.key}`
|
|||
|
|
: getRoleFromUrl() === "ProvinceOperator"
|
|||
|
|
? `${ROUTE_PROVINCEـHATCHINGS}/${item.key}`
|
|||
|
|
: getRoleFromUrl() === "CityJahad"
|
|||
|
|
? `${ROUTE_CITY_JIHADـHATCHINGS}/${item.key}`
|
|||
|
|
: ""
|
|||
|
|
);
|
|||
|
|
}}
|
|||
|
|
>
|
|||
|
|
<RemoveRedEyeIcon />
|
|||
|
|
</IconButton>
|
|||
|
|
</Tooltip>,
|
|||
|
|
page === 1 ? i + 1 : i + perPage * (page - 1) + 1,
|
|||
|
|
<Tooltip
|
|||
|
|
disableHoverListener={
|
|||
|
|
!(item?.killingInfo?.violationMessage && item?.violation)
|
|||
|
|
}
|
|||
|
|
key={item?.key}
|
|||
|
|
title={
|
|||
|
|
item?.violation
|
|||
|
|
? `متن گزارش تخلف: ${item?.killingInfo?.violationMessage}`
|
|||
|
|
: null
|
|||
|
|
}
|
|||
|
|
sx={{
|
|||
|
|
"&:hover": {
|
|||
|
|
cursor: item?.violation ? "pointer" : "default",
|
|||
|
|
},
|
|||
|
|
}}
|
|||
|
|
placement="top"
|
|||
|
|
>
|
|||
|
|
<Typography
|
|||
|
|
variant="body2"
|
|||
|
|
color={item?.violation ? "error" : "primary"}
|
|||
|
|
>
|
|||
|
|
{item?.violation ? "پیگیری" : "عادی"}
|
|||
|
|
</Typography>
|
|||
|
|
</Tooltip>,
|
|||
|
|
item?.licenceNumber,
|
|||
|
|
item?.poultry?.breedingUniqueId,
|
|||
|
|
item?.CertId,
|
|||
|
|
// item?.commitmentType === "free" ? "آزاد" : "دولتی",
|
|||
|
|
item?.poultry?.unitName || "-",
|
|||
|
|
`${item?.poultry?.userprofile?.fullName ?? "-"} (${
|
|||
|
|
item?.poultry?.userprofile?.mobile ?? "-"
|
|||
|
|
}) ${item?.violationReport ? "✉️" : ""}`,
|
|||
|
|
item?.InteractTypeName ? (
|
|||
|
|
<Typography
|
|||
|
|
variant="body2"
|
|||
|
|
color={item?.hasTenant ? "success.main" : ""}
|
|||
|
|
fontWeight={item?.hasTenant ? "bold" : "normal"}
|
|||
|
|
>
|
|||
|
|
{item?.InteractTypeName}
|
|||
|
|
</Typography>
|
|||
|
|
) : (
|
|||
|
|
"-"
|
|||
|
|
),
|
|||
|
|
item?.PersonTypeName,
|
|||
|
|
item?.UnionTypeName,
|
|||
|
|
`${item?.poultry?.address?.city?.name ?? "-"}/${
|
|||
|
|
item?.poultry?.cityOperator
|
|||
|
|
? item?.poultry?.cityOperator
|
|||
|
|
: "بدون تعاونی"
|
|||
|
|
}`,
|
|||
|
|
item?.vetFarm?.vetFarmMobile
|
|||
|
|
? `${item?.vetFarm?.vetFarmFullName} (${item?.vetFarm?.vetFarmMobile})`
|
|||
|
|
: "-",
|
|||
|
|
item.hall,
|
|||
|
|
item.period,
|
|||
|
|
formatTime(item?.createDate),
|
|||
|
|
formatTime(item?.date),
|
|||
|
|
item?.poultry?.killingAveAge?.toLocaleString(),
|
|||
|
|
item?.predicateDate ? formatJustDate(item?.predicateDate) : "-",
|
|||
|
|
item.chickenBreed,
|
|||
|
|
item.age,
|
|||
|
|
item?.quantity?.toLocaleString(),
|
|||
|
|
item?.increaseQuantity?.toLocaleString(),
|
|||
|
|
`${item.losses} (%${((item.losses * 100) / item.quantity).toFixed(0)})`,
|
|||
|
|
<Tooltip
|
|||
|
|
key={item?.key}
|
|||
|
|
placement="top"
|
|||
|
|
title="جهت مشاهده ثبت کننده تلفات کلیک کنید"
|
|||
|
|
>
|
|||
|
|
<Button
|
|||
|
|
// variant="outlined"
|
|||
|
|
style={{ color: "rgba(0,0,0,0.87)" }}
|
|||
|
|
onClick={() => {
|
|||
|
|
dispatch(
|
|||
|
|
OPEN_MODAL({
|
|||
|
|
title: "ویرایش تعداد جوجه ریزی",
|
|||
|
|
content: (
|
|||
|
|
<Grid container xs={12}>
|
|||
|
|
{!item?.directLossesInputer &&
|
|||
|
|
!item?.directLossesInputer ? (
|
|||
|
|
<Typography variant="body1">
|
|||
|
|
برای این جوجه ریزی تلفاتی ثبت نشده است.
|
|||
|
|
</Typography>
|
|||
|
|
) : (
|
|||
|
|
<Grid xs={12}>
|
|||
|
|
<Typography variant="body1">
|
|||
|
|
ثبت کننده تلفات اتحادیه:{" "}
|
|||
|
|
{item?.directLossesInputer
|
|||
|
|
? `${
|
|||
|
|
item?.directLossesInputer
|
|||
|
|
} در تاریخ ${formatJustDate(
|
|||
|
|
item?.directLossesDate
|
|||
|
|
)}`
|
|||
|
|
: " - "}
|
|||
|
|
</Typography>
|
|||
|
|
<Typography variant="body1">
|
|||
|
|
ویرایش کننده تلفات اتحادیه:
|
|||
|
|
{item?.directLossesEditor
|
|||
|
|
? `${
|
|||
|
|
item?.directLossesEditor
|
|||
|
|
} در تاریخ ${formatJustDate(
|
|||
|
|
item?.directLossesLastEditDate
|
|||
|
|
)}`
|
|||
|
|
: " - "}
|
|||
|
|
</Typography>
|
|||
|
|
</Grid>
|
|||
|
|
)}
|
|||
|
|
</Grid>
|
|||
|
|
),
|
|||
|
|
})
|
|||
|
|
);
|
|||
|
|
}}
|
|||
|
|
>
|
|||
|
|
{`${item?.directLosses?.toLocaleString()} (%${(
|
|||
|
|
(item.directLosses * 100) /
|
|||
|
|
item.quantity
|
|||
|
|
).toFixed(0)})`}
|
|||
|
|
</Button>
|
|||
|
|
</Tooltip>,
|
|||
|
|
`${item?.totalLosses?.toLocaleString()} (%${(
|
|||
|
|
(item.totalLosses * 100) /
|
|||
|
|
item.quantity
|
|||
|
|
).toFixed(0)})`,
|
|||
|
|
`${item?.totalCommitmentQuantity?.toLocaleString()}`,
|
|||
|
|
`${item?.totalFreeCommitmentQuantity?.toLocaleString()}`,
|
|||
|
|
`${item?.governmentalQuantity?.toLocaleString()}`,
|
|||
|
|
`${item?.governmentalKilledQuantity?.toLocaleString()}`,
|
|||
|
|
`${item?.freeQuantity?.toLocaleString()}`,
|
|||
|
|
`${item?.freeKilledQuantity?.toLocaleString()}`,
|
|||
|
|
`${item?.outProvinceKilledQuantity?.toLocaleString()}`,
|
|||
|
|
`${item?.outProvinceKilledWeight?.toLocaleString()}`,
|
|||
|
|
`${item?.barDifferenceRequestQuantity?.toLocaleString()}`,
|
|||
|
|
`${item?.barDifferenceRequestWeight?.toLocaleString()}`,
|
|||
|
|
`${item?.killingInfo?.provinceKillRequests?.toLocaleString()}`,
|
|||
|
|
`${item?.killingInfo?.provinceKillRequestsQuantity?.toLocaleString()}`,
|
|||
|
|
`${item?.killingInfo?.provinceKillRequestsWeight?.toLocaleString()}`,
|
|||
|
|
item?.killedQuantity?.toLocaleString() +
|
|||
|
|
` (%${((item?.killedQuantity * 100) / item.quantity).toFixed(0)})`,
|
|||
|
|
item?.leftOver?.toLocaleString(),
|
|||
|
|
`%${((item?.leftOver * 100) / item?.quantity).toFixed(0)}`,
|
|||
|
|
// item?.totalCommitment?.toLocaleString(),
|
|||
|
|
|
|||
|
|
`%${((item.totalLosses * 100) / item.quantity).toFixed(0)}`,
|
|||
|
|
`%${((item?.killedQuantity * 100) / item.quantity).toFixed(0)}`,
|
|||
|
|
`%${((item?.leftOver * 100) / item?.quantity).toFixed(0)}`,
|
|||
|
|
`%${(
|
|||
|
|
((item?.killedQuantity + item?.totalLosses) * 100) /
|
|||
|
|
item?.quantity
|
|||
|
|
).toFixed(0)}`,
|
|||
|
|
|
|||
|
|
item?.samasatDischargePercentage
|
|||
|
|
? `%${item?.samasatDischargePercentage}`
|
|||
|
|
: "-",
|
|||
|
|
item?.totalCommitment?.toLocaleString(),
|
|||
|
|
item?.governmentalKilledQuantity?.toLocaleString(),
|
|||
|
|
item?.freeKilledQuantity?.toLocaleString(),
|
|||
|
|
item?.totalAverageKilledWeight?.toLocaleString(),
|
|||
|
|
item?.totalKilledWeight?.toLocaleString(),
|
|||
|
|
item?.activeKill?.activeKill ? "دارد" : "ندارد",
|
|||
|
|
item?.activeKill?.countOfRequest ? item.activeKill.countOfRequest : "-",
|
|||
|
|
item?.killingInfo?.killHouseRequests?.toLocaleString(),
|
|||
|
|
item?.killingInfo?.killHouseRequestsFirstQuantity?.toLocaleString(),
|
|||
|
|
item?.killingInfo?.killHouseRequestsFirstWeight?.toLocaleString(),
|
|||
|
|
item?.killingInfo?.barCompleteWithKillHouse?.toLocaleString(),
|
|||
|
|
item?.killingInfo?.acceptedRealWightFinal?.toLocaleString(),
|
|||
|
|
item?.chainKilledQuantity?.toLocaleString(),
|
|||
|
|
item?.chainKilledWeight?.toLocaleString(),
|
|||
|
|
item?.exportKilledQuantity?.toLocaleString(),
|
|||
|
|
item?.exportKilledWeight?.toLocaleString(),
|
|||
|
|
item?.killingInfo?.wareHouseBars?.toLocaleString(),
|
|||
|
|
item?.killingInfo?.wareHouseBarsQuantity?.toLocaleString(),
|
|||
|
|
item?.killingInfo?.wareHouseBarsWeight?.toLocaleString(),
|
|||
|
|
item?.killingInfo?.wareHouseBarsWeightLose?.toFixed(2),
|
|||
|
|
item.lastChange
|
|||
|
|
? `${item.lastChange.fullName} (${getFaUserRole(
|
|||
|
|
item.lastChange.role
|
|||
|
|
)}) در تاریخ ${formatTime(item.lastChange.date)}`
|
|||
|
|
: "-",
|
|||
|
|
item.latestHatchingChange
|
|||
|
|
? `${item.latestHatchingChange.fullName} (${getFaUserRole(
|
|||
|
|
item.latestHatchingChange.role
|
|||
|
|
)}) در تاریخ ${formatTime(item.latestHatchingChange.date)}`
|
|||
|
|
: "-",
|
|||
|
|
item?.violationReport ? (
|
|||
|
|
<Tooltip title="مشاهده گزارش" placement="top" key={item?.key}>
|
|||
|
|
<IconButton
|
|||
|
|
color="primary"
|
|||
|
|
onClick={() => {
|
|||
|
|
dispatch(
|
|||
|
|
OPEN_MODAL({
|
|||
|
|
title: "گزارش ",
|
|||
|
|
content: (
|
|||
|
|
<SimpleTable
|
|||
|
|
columns={[
|
|||
|
|
"ثبت کننده",
|
|||
|
|
"تاریخ ثبت",
|
|||
|
|
"تخلف",
|
|||
|
|
"متن گزارش",
|
|||
|
|
"سند",
|
|||
|
|
]}
|
|||
|
|
data={[
|
|||
|
|
[
|
|||
|
|
item?.violationReporter,
|
|||
|
|
formatJustDate(item?.violationReportDate),
|
|||
|
|
item?.violation ? "دارد" : "ندارد",
|
|||
|
|
item?.violationReport,
|
|||
|
|
<Grid
|
|||
|
|
key={item?.key}
|
|||
|
|
container
|
|||
|
|
xs={12}
|
|||
|
|
justifyContent="center"
|
|||
|
|
gap={1}
|
|||
|
|
>
|
|||
|
|
{item?.violationImage?.map((option, index) => (
|
|||
|
|
<ShowImage
|
|||
|
|
key={`${option}-${index}`}
|
|||
|
|
src={option}
|
|||
|
|
/>
|
|||
|
|
))}
|
|||
|
|
</Grid>,
|
|||
|
|
],
|
|||
|
|
]}
|
|||
|
|
/>
|
|||
|
|
),
|
|||
|
|
})
|
|||
|
|
);
|
|||
|
|
}}
|
|||
|
|
>
|
|||
|
|
<ArticleIcon />
|
|||
|
|
</IconButton>
|
|||
|
|
</Tooltip>
|
|||
|
|
) : (
|
|||
|
|
"-"
|
|||
|
|
),
|
|||
|
|
];
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
setTableData(d);
|
|||
|
|
}, [data]);
|
|||
|
|
|
|||
|
|
const handleSubmit = async (event) => {
|
|||
|
|
event.preventDefault();
|
|||
|
|
dispatch(LOADING_START());
|
|||
|
|
dispatch(
|
|||
|
|
cityGetHatchingInfoFull({
|
|||
|
|
age1: selectedAge1,
|
|||
|
|
age2: selectedAge2,
|
|||
|
|
tab: "unknown",
|
|||
|
|
textValue: textValue,
|
|||
|
|
})
|
|||
|
|
);
|
|||
|
|
try {
|
|||
|
|
const response = await axios.get(
|
|||
|
|
`poultry_hatching/?role=${getRoleFromUrl()}&age1=${
|
|||
|
|
selectedAge1 ? selectedAge1 : 0
|
|||
|
|
}&age2=${
|
|||
|
|
selectedAge2 ? selectedAge2 : 0
|
|||
|
|
}&search=filter&value=${textValue}&page=${1}&page_size=${perPage}&unknown=true`
|
|||
|
|
);
|
|||
|
|
setData(response.data.results);
|
|||
|
|
setTotalRows(response.data.count);
|
|||
|
|
dispatch(LOADING_END());
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error("Error fetching data:", error);
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const handleRemoveFilter = async (event) => {
|
|||
|
|
event.preventDefault();
|
|||
|
|
setSelectedAge1(0);
|
|||
|
|
setSelectedAge2(0);
|
|||
|
|
dispatch(LOADING_START());
|
|||
|
|
setTextValue("");
|
|||
|
|
dispatch(
|
|||
|
|
cityGetHatchingInfoFull({
|
|||
|
|
age1: 0,
|
|||
|
|
age2: 0,
|
|||
|
|
tab: "unknown",
|
|||
|
|
textValue: textValue,
|
|||
|
|
})
|
|||
|
|
);
|
|||
|
|
try {
|
|||
|
|
const response = await axios.get(
|
|||
|
|
`poultry_hatching?role=${getRoleFromUrl()}&page=${page}&page_size=${perPage}&search=filter&value=${textValue}&unknown=true`
|
|||
|
|
);
|
|||
|
|
setData(response.data.results);
|
|||
|
|
setTotalRows(response.data.count);
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error("Error fetching data:", error);
|
|||
|
|
} finally {
|
|||
|
|
dispatch(LOADING_END());
|
|||
|
|
}
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const [lastUpdateData, setLastUpdateData] = useState();
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
async function fetchData() {
|
|||
|
|
try {
|
|||
|
|
const response = await axios.get(`last_update/?type=poultry_hatching`);
|
|||
|
|
setLastUpdateData(response.data);
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error("Error fetching data:", error);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
fetchData();
|
|||
|
|
}, []);
|
|||
|
|
|
|||
|
|
const tableTitle = (
|
|||
|
|
<Grid
|
|||
|
|
container
|
|||
|
|
alignItems="center"
|
|||
|
|
justifyContent="space-between"
|
|||
|
|
gap={2}
|
|||
|
|
paddingTop={2}
|
|||
|
|
mb={1}
|
|||
|
|
xs={12}
|
|||
|
|
mt={2}
|
|||
|
|
>
|
|||
|
|
<form onSubmit={handleSubmit} style={{ flex: 1 }}>
|
|||
|
|
<Grid container alignItems="center" gap={SPACING.SMALL}>
|
|||
|
|
<Grid sx={{ width: { xs: "72px", sm: "80px" } }}>
|
|||
|
|
<TextField
|
|||
|
|
size="small"
|
|||
|
|
label="از سن"
|
|||
|
|
id="outlined-controlled"
|
|||
|
|
value={selectedAge1}
|
|||
|
|
onChange={(event) => {
|
|||
|
|
setSelectedAge1(event.target.value);
|
|||
|
|
}}
|
|||
|
|
/>
|
|||
|
|
</Grid>
|
|||
|
|
<Grid sx={{ width: { xs: "72px", sm: "80px" } }}>
|
|||
|
|
<TextField
|
|||
|
|
size="small"
|
|||
|
|
label="تا سن"
|
|||
|
|
id="outlined-controlled"
|
|||
|
|
value={selectedAge2}
|
|||
|
|
onChange={(event) => {
|
|||
|
|
setSelectedAge2(event.target.value);
|
|||
|
|
}}
|
|||
|
|
/>
|
|||
|
|
</Grid>
|
|||
|
|
<TextField
|
|||
|
|
id="outlined-basic"
|
|||
|
|
size="small"
|
|||
|
|
label="جستجو"
|
|||
|
|
variant="outlined"
|
|||
|
|
sx={{ maxWidth: { xs: "100%", sm: 250 } }}
|
|||
|
|
value={textValue}
|
|||
|
|
onChange={handleTextChange}
|
|||
|
|
onKeyDown={(e) => {
|
|||
|
|
if (e.key === "Enter") {
|
|||
|
|
handleSubmit(e);
|
|||
|
|
}
|
|||
|
|
}}
|
|||
|
|
/>
|
|||
|
|
|
|||
|
|
<Button type="submit" endIcon={<RiSearchLine />}>
|
|||
|
|
جستجو
|
|||
|
|
</Button>
|
|||
|
|
<Tooltip title="خروجی اکسل" px={0}>
|
|||
|
|
<Button
|
|||
|
|
color="success"
|
|||
|
|
onClick={() => {
|
|||
|
|
openNotif({
|
|||
|
|
vertical: "top",
|
|||
|
|
horizontal: "center",
|
|||
|
|
msg: "فایل اکسل در حال دانلود می باشد، این علمیات ممکن است زمان بر باشد لطفا صبر کنید.",
|
|||
|
|
severity: "success",
|
|||
|
|
});
|
|||
|
|
const link = `${
|
|||
|
|
axios.defaults.baseURL
|
|||
|
|
}0/hatching_excel/?unknown=true&role=${getRoleFromUrl()}&key=${userKey}&age1=${
|
|||
|
|
selectedAge1 ? selectedAge1 : 0
|
|||
|
|
}&age2=${
|
|||
|
|
selectedAge2 ? selectedAge2 : 0
|
|||
|
|
}&search=filter&value=${textValue}`;
|
|||
|
|
window.location.href = link;
|
|||
|
|
}}
|
|||
|
|
>
|
|||
|
|
<RiFileExcel2Fill size={32} />
|
|||
|
|
</Button>
|
|||
|
|
</Tooltip>
|
|||
|
|
</Grid>
|
|||
|
|
</form>
|
|||
|
|
<Button onClick={handleRemoveFilter} color="error">
|
|||
|
|
حذف فیلتر
|
|||
|
|
</Button>
|
|||
|
|
</Grid>
|
|||
|
|
);
|
|||
|
|
const { hatchingInfoFull } = useSelector((state) => state.citySlice);
|
|||
|
|
|
|||
|
|
useEffect(() => {
|
|||
|
|
dispatch(
|
|||
|
|
cityGetHatchingInfoFull({
|
|||
|
|
age1: selectedAge1,
|
|||
|
|
age2: selectedAge2,
|
|||
|
|
tab: "unknown",
|
|||
|
|
textValue: textValue,
|
|||
|
|
})
|
|||
|
|
);
|
|||
|
|
}, []);
|
|||
|
|
|
|||
|
|
return (
|
|||
|
|
<Grid alignItems="center" justifyContent="center" mt={2} xs={12}>
|
|||
|
|
<Grid alignItems="center" justifyContent="center" isDashboard xs={12}>
|
|||
|
|
<ResponsiveTable
|
|||
|
|
noPagination
|
|||
|
|
isDashboard
|
|||
|
|
title={
|
|||
|
|
lastUpdateData &&
|
|||
|
|
`آخرین بروزرسانی : ${formatTime(lastUpdateData)} ${" "}`
|
|||
|
|
}
|
|||
|
|
columns={[
|
|||
|
|
"تعداد فارم",
|
|||
|
|
"تعداد جوجه ریزی",
|
|||
|
|
"حجم کل جوجه ریزی",
|
|||
|
|
"حجم باقی مانده در سالن",
|
|||
|
|
"حجم کشتار شده",
|
|||
|
|
"وزن کشتار شده",
|
|||
|
|
"حجم کل تلفات",
|
|||
|
|
"حجم تلفات اتحادیه",
|
|||
|
|
"حجم تلفات دامپزشک",
|
|||
|
|
"مانده سالن ( 20 تا 30 روزه)",
|
|||
|
|
"مانده سالن ( 30 تا 40 روزه)",
|
|||
|
|
"مانده سالن ( 40 تا 50 روزه)",
|
|||
|
|
"مانده سالن ( 50 تا 60 روزه)",
|
|||
|
|
"بیشتر از 60 روزه",
|
|||
|
|
]}
|
|||
|
|
data={[
|
|||
|
|
[
|
|||
|
|
hatchingInfoFull?.poultries?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.hatchings?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.totalHatchingQuantity?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.totalHatchingLeftOverQuantity?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.totalHatchingKilledQuantity?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.totalHatchingKilledWeight?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.totalHatchingAllLosses?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.totalHatchingUnionLosses?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.totalHatchingVetLosses?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.age2030?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.age3040?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.age4050?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.age5060?.toLocaleString(),
|
|||
|
|
hatchingInfoFull?.ageMoreThan60?.toLocaleString(),
|
|||
|
|
],
|
|||
|
|
]}
|
|||
|
|
/>
|
|||
|
|
</Grid>
|
|||
|
|
|
|||
|
|
{tableTitle}
|
|||
|
|
|
|||
|
|
<ResponsiveTable
|
|||
|
|
data={tableData}
|
|||
|
|
columns={[
|
|||
|
|
"عملیات",
|
|||
|
|
"جزئیات",
|
|||
|
|
"ردیف",
|
|||
|
|
"وضعیت",
|
|||
|
|
"شماره مجوز جوجه ریزی",
|
|||
|
|
"شناسه یکتا",
|
|||
|
|
"مجوز بهداشتی جوجه ریزی",
|
|||
|
|
// "نوع تعهد",
|
|||
|
|
"نام فارم",
|
|||
|
|
"مرغدار",
|
|||
|
|
"بهره برداری",
|
|||
|
|
"مالکیت",
|
|||
|
|
"ارتباط",
|
|||
|
|
"شهر/تعاونی",
|
|||
|
|
"دامپزشک فارم",
|
|||
|
|
"سالن",
|
|||
|
|
"دوره جوجه ریزی",
|
|||
|
|
"تاریخ ثبت جوجه ریزی",
|
|||
|
|
"تاریخ جوجه ریزی",
|
|||
|
|
"میانگین سن کشتار",
|
|||
|
|
"پیش بینی تاریخ کشتار",
|
|||
|
|
"نژاد",
|
|||
|
|
"سن",
|
|||
|
|
"حجم جوجه ریزی",
|
|||
|
|
"حجم افزایشی",
|
|||
|
|
"تلفات دامپزشک",
|
|||
|
|
"تلفات اتحادیه",
|
|||
|
|
"تلفات کل",
|
|||
|
|
"حجم تعهد دولتی",
|
|||
|
|
"حجم تعهد آزاد",
|
|||
|
|
"حجم کشتار دولتی",
|
|||
|
|
"وزن کشتار دولتی",
|
|||
|
|
"حجم کشتار آزاد",
|
|||
|
|
"وزن کشتار شده آزاد",
|
|||
|
|
"حجم فروش به خارج استان",
|
|||
|
|
"وزن فروش به خارج استان",
|
|||
|
|
"حجم اختلاف کشتار",
|
|||
|
|
"وزن اختلاف کشتار",
|
|||
|
|
"تخصیصات بدون بار",
|
|||
|
|
"حجم تخصیصات بدون بار",
|
|||
|
|
"وزن تخصیصات بدون بار",
|
|||
|
|
"حجم کشتار شده",
|
|||
|
|
"حجم مانده در سالن",
|
|||
|
|
" درصد مانده در سالن",
|
|||
|
|
" تلفات",
|
|||
|
|
" کشتار شده",
|
|||
|
|
" باقی مانده در سالن",
|
|||
|
|
"تایید تخلیه رصدیار",
|
|||
|
|
" تایید تخلیه در سماصط",
|
|||
|
|
"وزن تعهد دولتی",
|
|||
|
|
"وزن کشتار دولتی",
|
|||
|
|
"وزن کشتار آزاد",
|
|||
|
|
"میانگین وزن کشتار",
|
|||
|
|
"وزن کل کشتار شده",
|
|||
|
|
"تعداد کشتار فعال",
|
|||
|
|
"تعداد درخواست کشتار",
|
|||
|
|
"تعداد بارها",
|
|||
|
|
"حجم بارها",
|
|||
|
|
"وزن بارها",
|
|||
|
|
"حجم بارهای تحویلی",
|
|||
|
|
"وزن بارهای تحویلی",
|
|||
|
|
"حجم زنجیره",
|
|||
|
|
"وزن زنجیره",
|
|||
|
|
"حجم صادرات",
|
|||
|
|
"وزن صادرات",
|
|||
|
|
"بارهای ورودی به انبار",
|
|||
|
|
"حجم لاشه های انبار",
|
|||
|
|
"وزن لاشه های انبار",
|
|||
|
|
"درصد افت بارها",
|
|||
|
|
"آخرین تغییر",
|
|||
|
|
"سازنده جوجه ریزی",
|
|||
|
|
"گزارش",
|
|||
|
|
]}
|
|||
|
|
handlePageChange={handlePageChange}
|
|||
|
|
totalRows={totalRows}
|
|||
|
|
page={page}
|
|||
|
|
perPage={perPage}
|
|||
|
|
handlePerRowsChange={handlePerRowsChange}
|
|||
|
|
title="تعیین تکلیف نشدهها"
|
|||
|
|
/>
|
|||
|
|
</Grid>
|
|||
|
|
);
|
|||
|
|
};
|