Files
RasadDam_Frontend/src/Pages/Cooperatives.tsx
2026-01-19 13:08:58 +03:30

216 lines
7.7 KiB
TypeScript
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 { useEffect, useState } from "react";
import { useApiRequest } from "../utils/useApiRequest";
import { Grid } from "../components/Grid/Grid";
import Table from "../components/Table/Table";
import { useNavigate, useParams } from "@tanstack/react-router";
import { Popover } from "../components/PopOver/PopOver";
import { Tooltip } from "../components/Tooltip/Tooltip";
import Button from "../components/Button/Button";
import { useModalStore } from "../context/zustand-store/appStore";
import { ChildOrganizations } from "../partials/cooperatives/ChildOrganizations";
import { COOPERATIVE_LIST } from "../routes/paths";
import { TableButton } from "../components/TableButton/TableButton";
import { CooperativesDashboardDetails } from "../partials/cooperatives/CooperativesDashboardDetails";
import { AddActivityType } from "../partials/cooperatives/AddActivityType";
import ShowMoreInfo from "../components/ShowMoreInfo/ShowMoreInfo";
import ShowStringList from "../components/ShowStringList/ShowStringList";
export default function Cooperatives() {
const { openModal } = useModalStore();
const [pagesInfo, setPagesInfo] = useState({ page: 1, page_size: 10 });
const [cooperativesTableData, setCooperativesTableData] = useState([]);
const { id, name } = useParams({ strict: false });
const navigate = useNavigate();
const { data: cooperativesData, refetch } = useApiRequest({
api: `herd/web/api/v1/rancher_org_link/org_linked_rancher_list${
id ? `?org_id=${id}` : ""
}`,
method: "get",
params: {
...pagesInfo,
},
queryKey: [id ? "unioncooperatives" : "cooperatives", pagesInfo],
});
const { data: cooperativesDashboardData } = useApiRequest({
api: `herd/web/api/v1/rancher_org_link/${id}/org_ranchers_quota_dashboard/`,
method: "get",
queryKey: [id ? "unionCooperativeDashboard" : "cooperativeDashboard"],
enabled: !!id,
});
useEffect(() => {
if (cooperativesData?.results) {
const formattedData = cooperativesData.results.map(
(item: any, i: number) => {
return [
pagesInfo.page === 1
? i + 1
: i + pagesInfo.page_size * (pagesInfo.page - 1) + 1,
item?.name || "-",
item?.province || "-",
item?.city || "-",
item?.rancher_count || 0,
item?.herd_count || 0,
item?.livestock_count || 0,
item?.org_service_area?.length ? (
<ShowMoreInfo key={i} title="محدوده فعالیت">
<Grid
container
column
className="gap-2 p-2 justify-start items-start w-full"
>
<ShowStringList
showSearch={false}
strings={item.org_service_area.map(
(city: any) => city.name
)}
/>
</Grid>
</ShowMoreInfo>
) : (
"-"
),
item?.org_purchase_policy === "INTERNAL_ONLY"
? "بر اساس تعاونی"
: item?.org_purchase_policy === "CROSS_COOP"
? "برای کل استان"
: "-",
<Popover key={i}>
<Tooltip title="دامداران تعاونی" position="right">
<Button
variant="view"
page="cooperative_ranchers"
access="Show-Cooperative-Ranchers"
onClick={() => {
const path =
COOPERATIVE_LIST +
"/ranchers/" +
item?.id +
"/" +
item?.name;
navigate({ to: path });
}}
/>
</Tooltip>
<Tooltip title="تعریف نوع فعالیت" position="right">
<Button
variant="set"
page="cooperatives"
access="Set-Cooperative-Activity-Type"
onClick={() => {
openModal({
title: `تعریف نوع فعالیت ${item?.name || ""}`,
content: (
<AddActivityType getData={refetch} item={item} />
),
});
}}
/>
</Tooltip>
</Popover>,
<Tooltip title="زیرمجموعه ها" position="right">
<Button
variant="detail"
page="cooperatives"
access="Show-Child-Organizations"
onClick={() => {
openModal({
title: `زیرمجموعه های ${item?.name || ""}`,
content: (
<ChildOrganizations
orgId={item?.id}
orgName={item?.name || ""}
/>
),
isFullSize: true,
});
}}
/>
</Tooltip>,
];
}
);
setCooperativesTableData(formattedData);
}
}, [cooperativesData, pagesInfo, openModal, navigate, refetch]);
return (
<Grid container column className="gap-4 mt-2">
{id && (
<Grid isDashboard>
<Table
isDashboard
title="خلاصه اطلاعات"
noPagination
noSearch
columns={[
"تعداد کل سهمیه ها",
"مجموع وزن سهمیه ها (کیلوگرم)",
"مجموع وزن توزیع شده (کیلوگرم)",
"مجموع وزن باقیمانده (کیلوگرم)",
"مجموع وزن فروش رفته (کیلوگرم)",
"مجموع وزن ورود به انبار (کیلوگرم)",
"جزئیات",
]}
rows={[
[
cooperativesDashboardData?.quotas_summary?.total_quotas?.toLocaleString() ||
0,
cooperativesDashboardData?.quotas_summary?.total_amount?.toLocaleString() ||
0,
cooperativesDashboardData?.quotas_summary?.total_distributed?.toLocaleString() ||
0,
cooperativesDashboardData?.quotas_summary?.remaining_amount?.toLocaleString() ||
0,
cooperativesDashboardData?.quotas_summary?.sold_amount?.toLocaleString() ||
0,
cooperativesDashboardData?.quotas_summary?.inventory_received?.toLocaleString() ||
0,
<TableButton
size="small"
key="details"
onClick={() => {
openModal({
title: "جزئیات",
content: <CooperativesDashboardDetails orgId={id} />,
isFullSize: true,
});
}}
>
جزئیات
</TableButton>,
],
]}
/>
</Grid>
)}
<Table
className="mt-2"
onChange={(e) => {
setPagesInfo(e);
}}
count={cooperativesData?.count || 10}
isPaginated
title={id ? `تعاونی های ${name}` : "تعاونی ها"}
columns={[
"ردیف",
"نام",
"استان",
"شهر",
"تعداد دامدار",
"تعداد گله",
"تعداد دام",
"محدوده فعالیت",
"محدودیت دریافت نهاده",
"عملیات",
]}
rows={cooperativesTableData}
/>
</Grid>
);
}