"use client"; import React, { useState } from "react"; import { Card } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { StatsCard } from "../ui/stats-card"; import { StatsGrid } from "../ui/stats-grid"; import { useQuery } from "@apollo/client"; import { GET_SUPPLY_ORDERS } from "@/graphql/queries"; import { Calendar, MapPin, Building2, TrendingUp, DollarSign, Wrench, Package2, } from "lucide-react"; 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: string; 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 RealSupplyOrdersTab() { const [expandedOrders, setExpandedOrders] = useState>(new Set()); const { data, loading, error } = useQuery(GET_SUPPLY_ORDERS); const supplyOrders: SupplyOrder[] = data?.supplyOrders || []; const toggleOrderExpansion = (orderId: string) => { const newExpanded = new Set(expandedOrders); if (newExpanded.has(orderId)) { newExpanded.delete(orderId); } else { newExpanded.add(orderId); } setExpandedOrders(newExpanded); }; const getStatusBadge = (status: string) => { const statusMap: Record = { CREATED: { 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_PROGRESS: { 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] || { label: status, color: "bg-gray-500/20 text-gray-300 border-gray-500/30", }; 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", }); }; const formatDateTime = (dateString: string) => { return new Date(dateString).toLocaleString("ru-RU", { day: "2-digit", month: "2-digit", year: "numeric", hour: "2-digit", minute: "2-digit", }); }; // Статистика const totalOrders = supplyOrders.length; const totalAmount = supplyOrders.reduce((sum, order) => sum + order.totalAmount, 0); const totalItems = supplyOrders.reduce((sum, order) => sum + order.totalItems, 0); const completedOrders = supplyOrders.filter(order => order.status === "DELIVERED").length; if (loading) { return (
Загрузка заказов расходников...
); } if (error) { return (

Ошибка загрузки заказов

{error.message}

); } return (
{/* Статистика заказов расходников */} {/* Список заказов расходников */} {supplyOrders.length === 0 ? (

Пока нет заказов расходников

Создайте первый заказ расходников через кнопку "Создать поставку"

) : (
{supplyOrders.map((order) => { const isOrderExpanded = expandedOrders.has(order.id); return ( {/* Основная строка заказа */} toggleOrderExpansion(order.id)} > {/* Развернутая информация о заказе */} {isOrderExpanded && ( )} ); })}
ID Поставщик Дата поставки Дата создания Количество Сумма Статус
{order.id.slice(-8)}
{order.partner.name || order.partner.fullName || "Поставщик"}

ИНН: {order.partner.inn}

{formatDate(order.deliveryDate)}
{formatDateTime(order.createdAt)} {order.totalItems} шт
{formatCurrency(order.totalAmount)}
{getStatusBadge(order.status)}

Состав заказа:

{order.items.map((item) => (
{item.product.name}

Артикул: {item.product.article}

{item.product.category && ( {item.product.category.name} )}

Количество: {item.quantity} шт

Цена: {formatCurrency(item.price)}

{formatCurrency(item.totalPrice)}

))}
)}
); }