import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { toast } from "sonner"; import { Header, PageLayout } from "../../components/layout/Header"; import { useAuthStore } from "../../store/auth"; import { inventorySubheader } from "./panelMenu"; import { apiV26 } from "../../lib/api"; import { useInventoryData, projName } from "./useInventoryData"; import { faNum } from "../../lib/formatters"; import { isoToJalaliStr } from "../../lib/jalali"; // انبارها — مدیر پروژه: مشاهده انبارهای پروژه خودش + افزودن/ویرایش/حذف (ادمین دسترسی ندارد) export function WarehousesPage() { const navigate = useNavigate(); const user = useAuthStore((s) => s.user); const data = useInventoryData(); const isAdmin = user?.role === "admin" || user?.role === "procurement_manager"; const isPM = user?.role === "pm"; const [newName, setNewName] = useState(""); const [newDesc, setNewDesc] = useState(""); const [editId, setEditId] = useState(null); const [editName, setEditName] = useState(""); const [editDesc, setEditDesc] = useState(""); // ادمین / مدیر تدارکات به بخش «انبارها» دسترسی ندارد — مدیریت انبارها از «سازمان‌دهی» if (isAdmin) { return (
🔒

دسترسی ندارد

بخش «انبارها» مخصوص مدیران پروژه است. مدیریت انبارها از بخش «سازمان‌دهی» انجام می‌شود.

); } if (!isPM) { return (
این بخش فقط برای مدیر پروژه است.
); } const addWarehouse = async () => { const name = newName.trim(); if (!name) return toast.error("نام انبار الزامی است"); const projectId = user?.project_id; if (!projectId) return toast.error("پروژه انبار را انتخاب کنید"); try { await apiV26.warehouses.create({ project_id: projectId, name, description: newDesc.trim() || null }); setNewName(""); setNewDesc(""); toast.success(`انبار «${name}» اضافه شد ✓`); await data.refresh(); } catch (err) { toast.error(err instanceof Error ? err.message : "خطا در افزودن انبار"); } }; const saveEdit = async (id: string) => { if (!editName.trim()) return toast.error("نام انبار نمی‌تواند خالی باشد"); try { await apiV26.warehouses.update(id, { name: editName.trim(), description: editDesc.trim() || null }); setEditId(null); toast.success("تغییرات ذخیره شد"); await data.refresh(); } catch (err) { toast.error(err instanceof Error ? err.message : "خطا در ذخیره"); } }; const removeWarehouse = async (id: string) => { if (!confirm("انبار حذف شود؟ (انبارهای دارای سابقه تراکنش قابل حذف نیستند)")) return; try { await apiV26.warehouses.delete(id); toast.success("انبار حذف شد"); await data.refresh(); } catch (err) { toast.error(err instanceof Error ? err.message : "خطا در حذف انبار"); } }; return (
{isPM && (

+ افزودن انبار جدید

setNewName(e.target.value)} /> setNewDesc(e.target.value)} />
)}
{data.warehouses.map((w) => { const cnt = data.inventory.filter((r) => r.warehouse?.id === w.id).length; const txc = data.transactions.filter((t) => t.warehouse_id === w.id).length; return (
navigate(`/inventory?warehouse=${w.id}`)} title="ورود به داشبورد این انبار (فیلترشده)" >

🏬 {w.name}

{w.description || "—"}
پروژه: {projName(data.lookup.projects, w.project_id)} اقلام موجود: {faNum(cnt)} تراکنش‌ها: {faNum(txc)} تاریخ ایجاد: {isoToJalaliStr(w.created_at)}
{isPM && ( <> )}
{editId === w.id && isPM && (
e.stopPropagation()}> setEditName(e.target.value)} /> setEditDesc(e.target.value)} />
)}
); })}
); }