import { Sun, Waves, Loader2 } from "lucide-react"; import HeaderWithSupport from "../components/HeaderWithSupport"; import PersianDatePicker from "../components/PersianDatePicker"; import { useEffect, useState } from "react"; import { useSearchParams, useNavigate, useParams } from "react-router-dom"; import { formatPrice, safeGoBack } from "../utils/helpers"; import { useServiceGetReport } from "../requestHandler/use-wallet-hooks"; import { useRequireOwner } from "../hooks/useStoreOwnership"; import jMoment from "moment-jalaali"; import { MetaFunction } from "@remix-run/node"; export default function Reports() { const navigate = useNavigate(); const { storeId } = useParams(); useRequireOwner(storeId); // financial is owner-only const handleBack = () => { safeGoBack(navigate); }; const [fromDate, setFromDate] = useState(""); const [toDate, setToDate] = useState(""); const [searchParams, setSearchParams] = useSearchParams(); // Convert Persian date to Gregorian ISO string const convertPersianToGregorian = (persianDate: string): string => { // Persian date format is expected to be YYYY/MM/DD const [year, month, day] = persianDate.split("/"); const jMomentDate = jMoment(`${year}/${month}/${day}`, "jYYYY/jM/jD"); return jMomentDate.format("YYYY-MM-DD"); }; // Get filters for API const getFilters = () => { const filters: { fromDate?: string; toDate?: string } = {}; if (fromDate) { try { filters.fromDate = convertPersianToGregorian(fromDate); } catch (error) { console.error("Error converting fromDate:", error); } } if (toDate) { try { filters.toDate = convertPersianToGregorian(toDate); } catch (error) { console.error("Error converting toDate:", error); } } return Object.keys(filters).length > 0 ? filters : undefined; }; // Fetch report data const { data: reportData, isLoading } = useServiceGetReport(getFilters()); useEffect(() => { const params: Record = {}; if (fromDate) params.fromDate = fromDate; if (toDate) params.toDate = toDate; setSearchParams(params, { replace: true }); }, [fromDate, toDate, setSearchParams]); return (
{/* To Date */}
{isLoading ? (
) : reportData ? ( <>

میزان فروش کل (تومان):

جمع مبلغ پرداخت‌شده توسط خریداران

{formatPrice(reportData.totalSales.toString())}

وضعیت تسویه حساب (تومان):

وضعیت واریز درآمد در این بازه

تسویه شده: {formatPrice(reportData.totalSettled.toString())}

در انتظار پرداخت:{" "} {formatPrice(reportData.pendingSettlement.toString())}

) : (

خطا در بارگذاری گزارش

لطفا مجددا تلاش کنید

)}
); } export const meta: MetaFunction = () => { return [ { title: "گزارش مالی - ویترون" }, { name: "description", content: "مدیریت و مشاهده تمام گزارش مالی در فروشگاه شما. فیلتر بر اساس وضعیت و جستجو در گزارش مالی.", }, { name: "keywords", content: "گزارش مالی، مدیریت گزارش مالی، فروشگاه، مشتری، ویترون", }, { name: "robots", content: "noindex, follow" }, { property: "og:title", content: "گزارش مالی - ویترون" }, { property: "og:description", content: "مدیریت و مشاهده تمام گزارش مالی در فروشگاه شما. فیلتر بر اساس وضعیت و جستجو در گزارش مالی.", }, { property: "og:type", content: "website" }, { name: "twitter:card", content: "summary" }, { name: "twitter:title", content: "گزارش مالی - ویترون" }, { name: "twitter:description", content: "مدیریت و مشاهده تمام گزارش مالی در فروشگاه شما. فیلتر بر اساس وضعیت و جستجو در گزارش مالی.", }, ]; };