import React from "react"; import { getAvailableTransitionsByRole, getDeliveryAgreementComment, getOrderStatusComment, getStatusTone } from "../../constants/deliveryWorkflow"; import { demoUsers } from "../../data/mockAppData"; import { formatDateTime } from "../../utils/formatters"; import { Badge } from "../UI/Badge"; import { Button } from "../UI/Button"; import { Panel } from "../UI/Panel"; const getUsers = (users) => (Array.isArray(users) && users.length ? users : demoUsers); const resolveUserName = (users, userId) => getUsers(users).find((user) => user.id === userId)?.name || "Не назначен"; const splitItem = (item) => { if (!item) { return { name: "Позиция", quantity: "" }; } if (typeof item === "string") { const [name, quantity] = item.split("|").map((part) => part.trim()); return { name: name || item, quantity: quantity || "", }; } if (typeof item === "object") { return { name: item.name || item.label || "Позиция", quantity: typeof item.quantity === "number" ? String(item.quantity) : item.quantity || "", }; } return { name: "Позиция", quantity: "" }; }; export const OrderDetailPanel = ({ order, users, currentUser, onStatusChange, onAssignDriver }) => { if (!order) { return (

Выберите заказ для просмотра деталей.

); } const orderItems = Array.isArray(order.items) ? order.items.map(splitItem) : []; const orderHistory = Array.isArray(order.history) ? order.history : []; const role = currentUser?.role; const availableTransitions = role ? getAvailableTransitionsByRole({ status: order.status, role }) : []; const drivers = (Array.isArray(users) && users.length ? users : demoUsers).filter((u) => u.role === "driver"); const canAssignDriver = role === "logistician" || role === "admin"; return (

Карточка заказа

{order.orderNumber}

{order.customer.name} · {order.customer.address}

{order.status}

{getOrderStatusComment(order.status)}

Менеджер

{resolveUserName(users, order.managerId)}

Логист

{resolveUserName(users, order.logisticianIds?.[0])}

Водитель

{resolveUserName(users, order.assignedDriverId)}

Дата создания

{formatDateTime(order.createdAt)}

План доставки

{formatDateTime(order.scheduledDelivery)}

Канал связи

{order.customer.messenger}

Согласование доставки

{order.deliveryAgreementStatus}

Данные клиента {order.status}

{getDeliveryAgreementComment(order.deliveryAgreementStatus)}

Клиент

{order.customer.name}

Телефон

{order.customer.phone}

Адрес

{order.customer.address}

Дата доставки

{formatDateTime(order.scheduledDelivery)}

Состав заказа
{orderItems.length ? ( orderItems.map((item) => (
{item.name} {item.quantity ? {item.quantity} : null}
)) ) : (

Состав заказа не указан.

)}
{order.orderNotes?.length ? ( Комментарии
{order.orderNotes.map((note) => (
{note.text}
))}
) : null} {order.comments?.length ? ( Дополнительные комментарии
{order.comments.map((comment, index) => (
{comment}
))}
) : null} {availableTransitions.length ? ( Действия
{availableTransitions.map((status) => ( ))}
) : null} {canAssignDriver ? ( Назначить водителя
{drivers.map((driver) => ( ))} {order.assignedDriverId ? ( ) : null}
) : null} {orderHistory.length ? ( История
{orderHistory.map((entry) => (
{entry.action} {formatDateTime(entry.at)}
{entry.oldStatus || "Начало"} → {entry.newStatus}
))}
) : null}
); };