"use client"; import React, { useState } from "react"; import { useQuery } from "@apollo/client"; import { Card } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { useAuth } from "@/hooks/useAuth"; import { ChevronDown, ChevronRight, Calendar, Package, TrendingUp, DollarSign, Box, } from "lucide-react"; import { GET_SUPPLY_ORDERS } from "@/graphql/queries"; // Типы данных для заказов поставок расходников interface SupplyOrderItem { id: string; quantity: number; price: number; totalPrice: number; product: { id: string; name: string; article?: string; description?: string; category?: { id: string; name: string; }; }; } interface SupplyOrder { id: string; deliveryDate: string; status: "PENDING" | "CONFIRMED" | "IN_TRANSIT" | "DELIVERED" | "CANCELLED"; totalAmount: number; totalItems: number; createdAt: string; updatedAt: string; partner: { id: string; name?: string; fullName?: string; inn?: string; address?: string; phones?: string[]; emails?: string[]; }; organization: { id: string; name?: string; fullName?: string; type: string; }; items: SupplyOrderItem[]; } export function SuppliesConsumablesTab() { const [expandedOrders, setExpandedOrders] = useState>(new Set()); const { user } = useAuth(); // Загружаем заказы поставок const { data, loading, error } = useQuery(GET_SUPPLY_ORDERS, { fetchPolicy: "cache-and-network", // Всегда проверяем актуальные данные }); const toggleOrderExpansion = (orderId: string) => { const newExpanded = new Set(expandedOrders); if (newExpanded.has(orderId)) { newExpanded.delete(orderId); } else { newExpanded.add(orderId); } setExpandedOrders(newExpanded); }; // Получаем данные заказов поставок и фильтруем только заказы созданные текущим селлером const allSupplyOrders: SupplyOrder[] = data?.supplyOrders || []; const supplyOrders: SupplyOrder[] = allSupplyOrders.filter( (order) => order.organization.id === user?.organization?.id ); // Генерируем порядковые номера для заказов const ordersWithNumbers = supplyOrders.map((order, index) => ({ ...order, number: supplyOrders.length - index, // Обратный порядок для новых заказов сверху })); const getStatusBadge = (status: SupplyOrder["status"]) => { const statusMap = { PENDING: { label: "Ожидание", color: "bg-blue-500/20 text-blue-300 border-blue-500/30", }, CONFIRMED: { label: "Подтверждена", color: "bg-green-500/20 text-green-300 border-green-500/30", }, IN_TRANSIT: { label: "В пути", color: "bg-yellow-500/20 text-yellow-300 border-yellow-500/30", }, DELIVERED: { label: "Доставлена", color: "bg-purple-500/20 text-purple-300 border-purple-500/30", }, CANCELLED: { label: "Отменена", color: "bg-red-500/20 text-red-300 border-red-500/30", }, }; const { label, color } = statusMap[status]; return {label}; }; const formatCurrency = (amount: number) => { return new Intl.NumberFormat("ru-RU", { style: "currency", currency: "RUB", minimumFractionDigits: 0, }).format(amount); }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleDateString("ru-RU", { day: "2-digit", month: "2-digit", year: "numeric", }); }; if (loading) { return (
Загрузка заказов поставок...
); } if (error) { return (

Ошибка загрузки: {error.message}

); } return (
{/* Статистика заказов поставок */}

Заказов поставок

{supplyOrders.length}

Общая сумма

{formatCurrency( supplyOrders.reduce( (sum, order) => sum + Number(order.totalAmount), 0 ) )}

В пути

{ supplyOrders.filter((order) => order.status === "IN_TRANSIT") .length }

Доставлено

{ supplyOrders.filter((order) => order.status === "DELIVERED") .length }

{/* Таблица заказов поставок */}
{ordersWithNumbers.length === 0 ? ( ) : ( ordersWithNumbers.map((order) => { const isOrderExpanded = expandedOrders.has(order.id); return ( {/* Основная строка заказа поставки */} toggleOrderExpansion(order.id)} > {/* Развернутые детали заказа - товары */} {isOrderExpanded && order.items.map((item) => ( ))} ); }) )}
Поставщик Дата поставки Дата создания Товаров Сумма Статус

Заказов поставок пока нет

{isOrderExpanded ? ( ) : ( )} {order.number}
{order.partner.name || order.partner.fullName || "Поставщик"}
{order.partner.inn && (
ИНН: {order.partner.inn}
)}
{formatDate(order.deliveryDate)}
{formatDate(order.createdAt)} {order.totalItems}
{formatCurrency(Number(order.totalAmount))}
{getStatusBadge(order.status)}
Товар
{item.product.name}
{item.product.article && (
Артикул: {item.product.article}
)} {item.product.category && ( {item.product.category.name} )} {item.product.description && (
{item.product.description}
)}
{formatDate(order.createdAt)} {item.quantity}
{formatCurrency(Number(item.totalPrice))}
{formatCurrency(Number(item.price))} за шт.
); }