Files
Rasadyar_FrontEnd/src/pages/ProvinceReports.js

355 lines
13 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { Box, TextField, Typography } from "@mui/material";
import { Grid } from "../components/grid/Grid";
import { SPACING } from "../data/spacing";
import { BackButton } from "../components/back-button/BackButton";
import { useContext, useState } from "react";
import { AppContext } from "../contexts/AppContext";
import { DatePicker } from "@mui/x-date-pickers";
import moment from "moment";
import axios from "axios";
import { getRoleFromUrl } from "../utils/getRoleFromUrl";
import { useSelector } from "react-redux";
import { RiFileExcel2Fill, RiTicket2Line } from "react-icons/ri";
import { ImFilePdf } from "react-icons/im";
import { motion } from "framer-motion";
const ProvinceRequests = () => {
const [, , selectedDate1, setSelectedDate1, selectedDate2, setSelectedDate2] =
useContext(AppContext);
useContext(AppContext);
const [openNotif] = useContext(AppContext);
const authToken = useSelector((state) => state.userSlice.authToken);
const userInfo = useSelector((state) => state.userSlice);
const [textValue, setTextValue] = useState("");
const handleDownload = (link, isTicket = false) => {
if (!isTicket) {
openNotif({
vertical: "top",
horizontal: "center",
msg: "فایل در حال دانلود می باشد، این عملیات ممکن است زمان بر باشد لطفا صبر کنید.",
severity: "success",
});
window.location.href = link;
}
};
const handleTicketClick = async (link) => {
try {
const response = await axios.get(link);
if (response.status === 200) {
openNotif({
vertical: "top",
horizontal: "center",
msg: "تیکت با موفقیت ارسال شد",
severity: "success",
});
}
} catch (error) {
openNotif({
vertical: "top",
horizontal: "center",
msg: "خطا در ارسال تیکت",
severity: "error",
});
}
};
const reportList = [
{
title: "گزارش تحلیلی",
description: "گزارش تحلیلی از زنجیره مرغ گوشتی در استان",
link: `${axios.defaults.baseURL}management_all_poultry_and_warehouse_pdf/?date1=${selectedDate1}&date2=${selectedDate2}`,
icon: <ImFilePdf size={24} color="red" />,
},
{
title: "تیکت وضعیت سند بار ها",
description: "تیکت وضعیت سند بار ها",
link: `${axios.defaults.baseURL}send_bar_info_from_ticket/?key=${userInfo?.userProfile?.key}&date1=${selectedDate1}&date2=${selectedDate2}`,
icon: <RiTicket2Line size={24} color="#FFFFFF" />,
isTicket: true,
},
{
title: "مغایرت قرنطینه",
description: "مغایرت قرنطینه",
link: `${axios.defaults.baseURL}send_clearance_code_to_rsi/?date1=${selectedDate1}&date2=${selectedDate2}`,
},
{
title: "گزارش جامع کشتار",
description: "اطلاعات کلی از کشتار تا صنف",
link: `${
axios.defaults.baseURL
}detail_of_killing_excel/?date1=${selectedDate1}&date2=${selectedDate2}&role=${getRoleFromUrl()}&key=${
userInfo?.userProfile?.key
}`,
},
{
title: "گزارش پایش کشتارگاه ها",
description: "پایش کلی کشتارگاه ها",
link: `${axios.defaults.baseURL}comprehensive_report_of_the_slaughterhouse_excel/?date1=${selectedDate1}&date2=${selectedDate2}`,
},
{
title: "اطلاعات بارها",
description: "جزئیات بارهای ایجاد شده",
link: `${
axios.defaults.baseURL
}bar_excel/?start=${selectedDate1}&end=${selectedDate2}&key=${
userInfo?.userProfile?.key
}&role=${getRoleFromUrl()}`,
},
{
title: "گزارش پایش تعاونی ها",
description: "جزئیات جوجه ریزی و کشتار تعاونی ها",
link: `${
axios.defaults.baseURL
}general_city_operator/?date1=${selectedDate1}&date2=${selectedDate2}&key=${
userInfo?.userProfile?.key
}&role=${getRoleFromUrl()}`,
},
{
title: "گزارش کلی خریداران",
description: "گزارش تخصیص و پخش خریداران",
link: `${axios.defaults.baseURL}kill_house_user_excel/?date1=${selectedDate1}&date2=${selectedDate2}`,
},
{
title: "درخواست مرغداران",
description: "درخواست های کتشار ثبت شده توسط مرغداران",
link: `${
axios.defaults.baseURL
}poultry_kill_request_excel/?start=${selectedDate1}&end=${selectedDate1}&role=${getRoleFromUrl()}&token=${authToken}`,
},
{
title: "اعلام نیاز خریداران",
description: "اعلام نیاز کشتار از طرف خریداران",
link: `${axios.defaults.baseURL}kill_house_excel/?start=${selectedDate1}&end=${selectedDate2}`,
},
{
title: "جوجه ریزی های فعال",
description: "اطلاعات تکمیلی جوجه ریزی",
link: `${axios.defaults.baseURL}0/hatching_excel`,
},
{
title: "جوجه ریزی های بایگانی شده",
description: "اطلاعات تکمیلی جوجه ریزی",
link: `${axios.defaults.baseURL}archive_hatching_excel/?key=${userInfo?.userProfile?.key}`,
},
{
title: "درخواست های کشتار",
description: "جزئیات درخواست مرغداران تا تحویلی کشتارگاه",
link: `${axios.defaults.baseURL}poultry_request_report_excel/?start=${selectedDate1}&end=${selectedDate2}&key=${userInfo?.userProfile?.key}`,
},
{
title: "اصناف",
description: "اطلاعات اصناف ثبت شده",
link: `${axios.defaults.baseURL}guilds_excel/?key=${userInfo?.userProfile?.key}`,
},
{
title: "کاربران",
description: "اطلاعات کاربران ثبت شده",
link: `${axios.defaults.baseURL}get_all_user_excel/`,
},
{
title: "تخصیصات",
description: "جزئیات تخصیص به خریداران",
link: `${axios.defaults.baseURL}allocated_excel/?start=${selectedDate1}&end=${selectedDate2}`,
},
{
title: "گزارش پخش روزانه",
description: "کشتارگاه به مباشر/صنف",
link: `${axios.defaults.baseURL}all_inventory_excel/?date1=${selectedDate1}&date2=${selectedDate2}`,
},
{
title: "گزارش پخش روزانه",
description: "مباشر به صنف",
link: `${axios.defaults.baseURL}steward_ware_house_total_report_daily_excel/?date1=${selectedDate1}&date2=${selectedDate2}`,
},
{
title: "آمار جوجه ریزی",
description: "جزئیات جوجه ریزی",
link: `${axios.defaults.baseURL}hatching_date_range_excel/?date1=${selectedDate1}&date2=${selectedDate2}`,
},
{
title: "بارهای تکمیل شده",
description: "جزئیات بارهای تکمیل شده",
link: `${axios.defaults.baseURL}bar-management-kill-house-excel/?key=${userInfo?.userProfile?.key}&date1=${selectedDate1}&date2=${selectedDate2}`,
},
];
return (
<motion.div
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
exit={{ opacity: 0 }}
>
<Box display="flex" justifyContent="center" alignItems="center">
<Grid container direction="column" xs={12} sm={12} md={10} lg={10}>
<BackButton />
<Grid
container
alignItems="center"
gap={SPACING.SMALL}
sx={{ color: "#727272" }}
px={2}
>
<Grid
xs={12}
container
mt={1}
alignItems="center"
spacing={1}
mb={SPACING.SMALL}
>
<Grid>
<Typography sx={{ fontSize: "14px", color: "black" }}>
تاریخ گزارش:
</Typography>
</Grid>
<Grid
container
direction={"row"}
mr={1}
mt={{ xs: 2, md: 0 }}
mb={{ xs: 1, md: 0 }}
>
<DatePicker
label="از تاریخ"
renderInput={(params) => (
<TextField
{...params}
style={{ width: "160px" }}
size="small"
/>
)}
value={selectedDate1}
onChange={(newValue) => {
setSelectedDate1(moment(newValue).format("YYYY-MM-DD"));
}}
/>
<Grid mx={0.5}></Grid>
<DatePicker
label="تا تاریخ"
renderInput={(params) => (
<TextField
{...params}
style={{ width: "160px" }}
size="small"
/>
)}
value={selectedDate2}
onChange={(newValue) => {
setSelectedDate2(moment(newValue).format("YYYY-MM-DD"));
}}
/>
</Grid>
<Grid>
<TextField
sx={{ minWidth: "250px" }}
id="outlined-basic"
size="small"
label="جستجو"
variant="outlined"
value={textValue}
onChange={(e) => {
setTextValue(e.target.value);
}}
/>
</Grid>
</Grid>
</Grid>
<Grid
container
xs={12}
rowSpacing={SPACING.SMALL}
justifyContent="center"
mb={2}
px={1}
>
{reportList
?.filter((option) => option?.title.includes(textValue))
?.map((item, i) => (
<Grid item xs={6} sm={4} md={4} lg={2} key={i} px={1}>
<a
style={{ outline: "none", color: "#727272" }}
href={!item.isTicket ? item?.link : "#"}
rel="noreferrer"
onClick={(e) => {
if (item.isTicket) {
e.preventDefault();
handleTicketClick(item.link);
} else {
e.preventDefault();
handleDownload(item.link, item.isTicket);
}
}}
>
<motion.div
whileHover={{ scale: 1.05 }}
whileTap={{ scale: 0.9 }}
>
<Box
p={SPACING.MEDIUM}
border="1px solid #E6E6E6"
borderRadius={SPACING.SMALL}
bgcolor="#FCFCFC"
display="flex"
flexDirection="column"
alignItems="center"
sx={{ cursor: "pointer" }}
minHeight="11rem"
maxHeight="11rem"
>
<Box
sx={{
width: 60,
minWidth: 60,
height: 60,
minHeight: 60,
borderRadius: "50%",
backgroundColor: "#244CCC",
display: "flex",
justifyContent: "center",
alignItems: "center",
marginBottom: SPACING.SMALL,
}}
>
{item.icon || (
<RiFileExcel2Fill size={24} color="#FFFFFF" />
)}
</Box>
<Typography
variant="body1"
mt={SPACING.SMALL}
sx={{
color: "#727272",
fontWeight: { xs: 500, md: 600 },
fontSize: { xs: "12px", md: "16px" },
}}
>
{item?.title}
</Typography>
<Typography
mt={SPACING.SMALL}
sx={{ color: "#727272", fontSize: "10px" }}
>
{item?.description}
</Typography>
</Box>
</motion.div>
</a>
</Grid>
))}
</Grid>
</Grid>
</Box>
</motion.div>
);
};
export default ProvinceRequests;