Добавлено обновление кэша для расходников фулфилмента в компонентах создания и отображения заказов. Реализованы новые GraphQL запросы для получения данных о расходниках. Удалены устаревшие компоненты уведомлений о непринятых поставках для упрощения интерфейса. Оптимизирована логика отображения и обновления данных о заказах.

This commit is contained in:
Veronika Smirnova
2025-07-29 17:45:29 +03:00
parent 7877f61d5a
commit 50438bb21f
18 changed files with 3693 additions and 191 deletions

View File

@ -691,7 +691,7 @@ export const resolvers = {
});
},
// Мои расходники
// Мои расходники (объединенные данные из supply и supplyOrder)
mySupplies: async (_: unknown, __: unknown, context: Context) => {
if (!context.user) {
throw new GraphQLError("Требуется авторизация", {
@ -708,11 +708,101 @@ export const resolvers = {
throw new GraphQLError("У пользователя нет организации");
}
return await prisma.supply.findMany({
// Получаем расходники из таблицы supply (уже доставленные)
const existingSupplies = await prisma.supply.findMany({
where: { organizationId: currentUser.organization.id },
include: { organization: true },
orderBy: { createdAt: "desc" },
});
// Получаем заказы поставок, созданные этим фулфилмент-центром для себя
// Показываем только заказы, которые еще не доставлены
const ourSupplyOrders = await prisma.supplyOrder.findMany({
where: {
organizationId: currentUser.organization.id, // Создали мы
fulfillmentCenterId: currentUser.organization.id, // Получатель - мы
status: {
in: ["PENDING", "CONFIRMED", "IN_TRANSIT"], // Только не доставленные заказы
},
},
include: {
partner: true,
items: {
include: {
product: {
include: {
category: true,
},
},
},
},
},
orderBy: { createdAt: "desc" },
});
// Преобразуем заказы поставок в формат supply для единообразия
const suppliesFromOrders = ourSupplyOrders.flatMap((order) =>
order.items.map((item) => ({
id: `order-${order.id}-${item.id}`,
name: item.product.name,
description:
item.product.description || `Заказ от ${order.partner.name}`,
price: item.price,
quantity: item.quantity,
unit: "шт",
category: item.product.category?.name || "Расходники",
status:
order.status === "PENDING"
? "in-transit"
: order.status === "CONFIRMED"
? "in-transit"
: order.status === "IN_TRANSIT"
? "in-transit"
: "available",
date: order.createdAt,
supplier: order.partner.name || order.partner.fullName || "Не указан",
minStock: Math.round(item.quantity * 0.1),
currentStock: order.status === "DELIVERED" ? item.quantity : 0,
imageUrl: null,
createdAt: order.createdAt,
updatedAt: order.updatedAt,
organizationId: currentUser.organization.id,
organization: currentUser.organization,
shippedQuantity: 0,
}))
);
// Проверяем все заказы для этого фулфилмент-центра для отладки
const allOurOrders = await prisma.supplyOrder.findMany({
where: {
organizationId: currentUser.organization.id,
fulfillmentCenterId: currentUser.organization.id,
},
select: { id: true, status: true, createdAt: true },
});
// Логирование для отладки
console.log("🔥🔥🔥 MY_SUPPLIES RESOLVER CALLED 🔥🔥🔥");
console.log("📊 mySupplies resolver debug:", {
organizationId: currentUser.organization.id,
existingSuppliesCount: existingSupplies.length,
ourSupplyOrdersCount: ourSupplyOrders.length,
suppliesFromOrdersCount: suppliesFromOrders.length,
allOrdersCount: allOurOrders.length,
allOrdersStatuses: allOurOrders.map((o) => ({
id: o.id,
status: o.status,
createdAt: o.createdAt,
})),
filteredOrdersStatuses: ourSupplyOrders.map((o) => ({
id: o.id,
status: o.status,
})),
});
console.log("🔥🔥🔥 END MY_SUPPLIES RESOLVER 🔥🔥🔥");
// Объединяем существующие расходники и расходники из заказов
return [...existingSupplies, ...suppliesFromOrders];
},
// Заказы поставок расходников