import React, { useState } from "react"; import { motion, AnimatePresence, Variants } from "framer-motion"; import Typography from "../components/Typography/Typography"; import { Grid } from "../components/Grid/Grid"; import Textfield from "../components/Textfeild/Textfeild"; import Button from "../components/Button/Button"; import { useToast } from "../hooks/useToast"; import { useApiMutation } from "../utils/useApiRequest"; import { DocumentTextIcon, IdentificationIcon, ArrowPathIcon, } from "@heroicons/react/24/outline"; interface TransferGood { goodCode: number; goodAmount: number; goodUnit: number; goodUnitStr: string; goodStr: string; } interface VeterinaryTransferItem { trIDCode: string; trTypeCode: number; trTypeCodeStr: string; trStatus: number; trStatusStr: string; sourcePartIDCode: string; sourceCertID: string; desPartIDCode: string; desCertID: string; issueDate: string; issueDateStr: string; resideDate: string; resideDateStr: string; listofGoods: TransferGood[]; message: string | null; errorCode: number; } interface VeterinaryTransferResponse { status: boolean; statusCode: number; data: VeterinaryTransferItem[]; apiLogId: string; } interface UnitProperty { partIDCode: string | null; unitPostalCode: string | null; postalAddress: string | null; detailAddress: string | null; unitName: string | null; unitGroupStr: string | null; unitTypeStr: string | null; licenseStatusStr: string | null; licenseID: string | null; ownerFullName: string | null; ownerCompany: string | null; lesseeFullName: string | null; activityTypeName: string | null; } interface InquiryFarmData { listUnitProperty?: UnitProperty[]; errorCode?: number; message?: string; } interface InquiryFarmResponse { status: boolean; statusCode: number; data: InquiryFarmData; apiLogId: string; } const VeterinaryTransfer: React.FC = () => { const [trIDCode, setTrIDCode] = useState(""); const [transferData, setTransferData] = useState( [], ); const [farmInfoByPartId, setFarmInfoByPartId] = useState< Record >({}); const [farmLoadingByPartId, setFarmLoadingByPartId] = useState< Record >({}); const showToast = useToast(); const transferMutation = useApiMutation({ api: "veterinary-transfer", method: "get", }); const inquiryFarmMutation = useApiMutation({ api: "inquiry-farm", method: "get", disableBackdrop: true, }); const handleSearch = async () => { const trimmed = trIDCode.trim(); if (!trimmed) { showToast("لطفا کد رهگیری گواهی بهداشت حمل را وارد کنید", "error"); return; } try { const result = await transferMutation.mutateAsync({ trIDCode: trimmed }); if (result?.status && Array.isArray(result?.data) && result.data.length) { setTransferData(result.data); } else { setTransferData([]); showToast("نتیجه‌ای یافت نشد", "info"); } } catch (error: any) { console.error("Veterinary transfer error:", error); showToast("خطا در دریافت اطلاعات گواهی بهداشتی حمل", "error"); setTransferData([]); } }; const handleKeyPress = (e: React.KeyboardEvent) => { if (e.key === "Enter") { handleSearch(); } }; const fetchFarmInquiry = async (partIdCode: string) => { const code = String(partIdCode || "").trim(); if (!code) return; setFarmLoadingByPartId((prev) => ({ ...prev, [code]: true })); try { const res = await inquiryFarmMutation.mutateAsync({ PartIdCode: code }); setFarmInfoByPartId((prev) => ({ ...prev, [code]: res })); if (!res?.status) { showToast("خطا در استعلام واحد کشاورزی", "error"); } } catch (error: any) { console.error("Inquiry farm error:", error); showToast("خطا در استعلام واحد کشاورزی", "error"); setFarmInfoByPartId((prev) => ({ ...prev, [code]: null })); } finally { setFarmLoadingByPartId((prev) => ({ ...prev, [code]: false })); } }; const getFirstUnitProperty = (res?: InquiryFarmResponse | null) => { const list = res?.data?.listUnitProperty; if (!Array.isArray(list) || list.length === 0) return null; return list[0]; }; const cardVariants: Variants = { hidden: { opacity: 0, y: 20, scale: 0.95 }, visible: (i: number) => ({ opacity: 1, y: 0, scale: 1, transition: { delay: i * 0.1, duration: 0.3, ease: "easeOut", }, }), exit: { opacity: 0, scale: 0.95, transition: { duration: 0.2 }, }, }; return ( استعلام گواهی بهداشتی حمل setTrIDCode(e.target.value)} onKeyPress={handleKeyPress} fullWidth /> {transferData.length > 0 && ( نتایج جستجو ({transferData.length}) {transferData.map((item, index) => { const sourceCode = String(item.sourcePartIDCode || "").trim(); const destCode = String(item.desPartIDCode || "").trim(); const sourceInquiry = farmInfoByPartId[sourceCode]; const destInquiry = farmInfoByPartId[destCode]; const sourceUnit = getFirstUnitProperty(sourceInquiry); const destUnit = getFirstUnitProperty(destInquiry); return (
ردیف {index + 1}
کد رهگیری گواهی بهداشتی حمل {item.trIDCode}
نوع گواهی بهداشتی حمل {item.trTypeCodeStr}
وضعیت {item.trStatusStr}
شماره مجوز مبداء {item.sourceCertID || "-"}
شماره مجوز مقصد {item.desCertID || "-"}
تاریخ صدور گواهی بهداشتی حمل {item.issueDateStr}
تاریخ تغییر وضعیت {item.resideDateStr}
شناسه یکتای واحدهای کشاورزی مبداء {item.sourcePartIDCode}
شناسه یکتای واحدهای کشاورزی مقصد {item.desPartIDCode}
{item.listofGoods && item.listofGoods.length > 0 && (
لیست کالا
{item.listofGoods.map((g, idx) => ( ))}
ردیف نام کالا مقدار واحد
{idx + 1} {g.goodStr} {Number(g.goodAmount).toLocaleString()} {g.goodUnitStr}
)} {(sourceUnit || destUnit) && (
{sourceUnit && (
شناسه یکتای واحد کشاورزی (مبداء)
کد پستی {sourceUnit.unitPostalCode || "-"}
جزئیات آدرس {sourceUnit.detailAddress || sourceUnit.postalAddress || "-"}
نام واحد {sourceUnit.unitName || "-"}
طبقه بندی نوع واحد {sourceUnit.unitGroupStr || "-"}
نوع واحد {sourceUnit.unitTypeStr || "-"}
وضعیت پروانه بهره برداری/مجوز فعالیت {sourceUnit.licenseStatusStr || "-"}
شماره پروانه بهره برداری/مجوز فعالیت {sourceUnit.licenseID || "-"}
نام مالک/بهره بردار {sourceUnit.ownerFullName || "-"}
نام شرکت مالک/بهره بردار {sourceUnit.ownerCompany || "-"}
نام مستاجر {sourceUnit.lesseeFullName?.trim() || "-"}
عنوان فعالیت {sourceUnit.activityTypeName || "-"}
)} {destUnit && (
شناسه یکتای واحد کشاورزی (مقصد)
کد پستی {destUnit.unitPostalCode || "-"}
جزئیات آدرس {destUnit.detailAddress || destUnit.postalAddress || "-"}
نام واحد {destUnit.unitName || "-"}
طبقه بندی نوع واحد {destUnit.unitGroupStr || "-"}
نوع واحد {destUnit.unitTypeStr || "-"}
وضعیت پروانه بهره برداری/مجوز فعالیت {destUnit.licenseStatusStr || "-"}
شماره پروانه بهره برداری/مجوز فعالیت {destUnit.licenseID || "-"}
نام مالک/بهره بردار {destUnit.ownerFullName || "-"}
نام شرکت مالک/بهره بردار {destUnit.ownerCompany || "-"}
نام مستاجر {destUnit.lesseeFullName?.trim() || "-"}
عنوان فعالیت {destUnit.activityTypeName || "-"}
)}
)} {item.message && (
پیام
{item.message}
)}
); })}
)}
); }; export default VeterinaryTransfer;