This commit is contained in:
Bivekich
2025-07-30 18:32:52 +03:00
parent 38dcfcef2b
commit 593ae16e1e
10 changed files with 192 additions and 48 deletions

View File

@ -728,33 +728,57 @@ export const resolvers = {
},
});
// Получаем расходники селлеров из таблицы supply
// Это расходники, созданные при доставке заказов от селлеров
const existingSupplies = await prisma.supply.findMany({
// Получаем ВСЕ расходники из таблицы supply для фулфилмента
const allSupplies = await prisma.supply.findMany({
where: { organizationId: currentUser.organization.id },
include: { organization: true },
orderBy: { createdAt: "desc" },
});
// Получаем все заказы фулфилмента для себя (чтобы исключить их расходники)
const fulfillmentOwnOrders = await prisma.supplyOrder.findMany({
where: {
organizationId: currentUser.organization.id, // Созданы фулфилментом
fulfillmentCenterId: currentUser.organization.id, // Для себя
status: "DELIVERED",
},
include: {
items: {
include: {
product: true,
},
},
},
});
// Создаем набор названий товаров из заказов фулфилмента для себя
const fulfillmentProductNames = new Set(
fulfillmentOwnOrders.flatMap((order) =>
order.items.map((item) => item.product.name)
)
);
// Фильтруем расходники: исключаем те, что созданы заказами фулфилмента для себя
const sellerSupplies = allSupplies.filter((supply) => {
// Если расходник соответствует товару из заказа фулфилмента для себя,
// то это расходник фулфилмента, а не селлера
return !fulfillmentProductNames.has(supply.name);
});
// Логирование для отладки
console.log("🔥🔥🔥 SELLER SUPPLIES RESOLVER CALLED 🔥🔥🔥");
console.log("📊 Расходники селлеров:", {
organizationId: currentUser.organization.id,
organizationType: currentUser.organization.type,
existingSuppliesCount: existingSupplies.length,
allSuppliesCount: allSupplies.length,
fulfillmentOwnOrdersCount: fulfillmentOwnOrders.length,
fulfillmentProductNames: Array.from(fulfillmentProductNames),
filteredSellerSuppliesCount: sellerSupplies.length,
sellerOrdersCount: sellerSupplyOrders.length,
sellerOrders: sellerSupplyOrders.map((o) => ({
id: o.id,
sellerName: o.organization.name,
supplierName: o.partner.name,
status: o.status,
itemsCount: o.items.length,
})),
});
// Возвращаем только расходники селлеров из таблицы supply
// TODO: В будущем можно добавить фильтрацию по источнику заказа
return existingSupplies;
// Возвращаем только расходники селлеров (исключая расходники фулфилмента)
return sellerSupplies;
},
// Расходники фулфилмента (материалы для работы фулфилмента)
@ -818,12 +842,14 @@ export const resolvers = {
category: item.product.category?.name || "Расходники фулфилмента",
status:
order.status === "PENDING"
? "in-transit"
? "planned"
: order.status === "CONFIRMED"
? "in-transit"
? "confirmed"
: order.status === "IN_TRANSIT"
? "in-transit"
: "available",
: order.status === "DELIVERED"
? "in-stock"
: "planned",
date: order.createdAt,
supplier: order.partner.name || order.partner.fullName || "Не указан",
minStock: Math.round(item.quantity * 0.1),
@ -3751,6 +3777,7 @@ export const resolvers = {
totalItems: totalItems,
organizationId: currentUser.organization.id,
fulfillmentCenterId: fulfillmentCenterId,
logisticsPartnerId: args.input.logisticsPartnerId,
status: initialStatus,
items: {
create: orderItems,
@ -3772,6 +3799,11 @@ export const resolvers = {
users: true,
},
},
logisticsPartner: {
include: {
users: true,
},
},
items: {
include: {
product: {
@ -3803,7 +3835,7 @@ export const resolvers = {
quantity: item.quantity,
unit: "шт",
category: productWithCategory?.category?.name || "Расходники",
status: "in-transit", // Статус "в пути" так как заказ только создан
status: "planned", // Статус "запланировано" (ожидает одобрения поставщиком)
date: new Date(args.input.deliveryDate),
supplier: partner.name || partner.fullName || "Не указан",
minStock: Math.round(item.quantity * 0.1), // 10% от заказанного как минимальный остаток
@ -5288,10 +5320,53 @@ export const resolvers = {
},
});
// Если статус изменился на DELIVERED, обновляем склад фулфилмента
if (args.status === "DELIVERED" && existingOrder.fulfillmentCenterId) {
console.log("🚚 Обновляем склад фулфилмента:", {
// Обновляем статусы расходников в зависимости от статуса заказа
const targetOrganizationId = existingOrder.fulfillmentCenterId || existingOrder.organizationId;
if (args.status === "CONFIRMED") {
// При подтверждении поставщиком - переводим расходники в статус "confirmed"
await prisma.supply.updateMany({
where: {
organizationId: targetOrganizationId,
status: "planned",
// Находим расходники по названиям товаров из заказа
name: {
in: existingOrder.items.map(item => item.product.name)
}
},
data: {
status: "confirmed"
}
});
console.log("✅ Статусы расходников обновлены на 'confirmed'");
}
if (args.status === "IN_TRANSIT") {
// При отгрузке - переводим расходники в статус "in-transit"
await prisma.supply.updateMany({
where: {
organizationId: targetOrganizationId,
status: "confirmed",
name: {
in: existingOrder.items.map(item => item.product.name)
}
},
data: {
status: "in-transit"
}
});
console.log("✅ Статусы расходников обновлены на 'in-transit'");
}
// Если статус изменился на DELIVERED, обновляем склад
if (args.status === "DELIVERED") {
console.log("🚚 Обновляем склад организации:", {
targetOrganizationId,
fulfillmentCenterId: existingOrder.fulfillmentCenterId,
organizationId: existingOrder.organizationId,
itemsCount: existingOrder.items.length,
items: existingOrder.items.map((item) => ({
productName: item.product.name,
@ -5299,19 +5374,19 @@ export const resolvers = {
})),
});
// Обновляем расходники фулфилмента
// Обновляем расходники
for (const item of existingOrder.items) {
console.log("📦 Обрабатываем товар:", {
productName: item.product.name,
quantity: item.quantity,
fulfillmentCenterId: existingOrder.fulfillmentCenterId,
targetOrganizationId,
});
// Ищем существующий расходник
// Ищем существующий расходник в правильной организации
const existingSupply = await prisma.supply.findFirst({
where: {
name: item.product.name,
organizationId: existingOrder.fulfillmentCenterId,
organizationId: targetOrganizationId,
},
});
@ -5329,14 +5404,14 @@ export const resolvers = {
where: { id: existingSupply.id },
data: {
currentStock: existingSupply.currentStock + item.quantity,
status: "available", // Меняем статус на "доступен"
status: "in-stock", // Меняем статус на "на складе"
},
});
} else {
console.log(" Создаем новый расходник:", {
name: item.product.name,
quantity: item.quantity,
organizationId: existingOrder.fulfillmentCenterId,
organizationId: targetOrganizationId,
});
// Создаем новый расходник
@ -5350,7 +5425,7 @@ export const resolvers = {
quantity: item.quantity,
unit: "шт",
category: item.product.category?.name || "Расходники",
status: "available",
status: "in-stock",
date: new Date(),
supplier:
existingOrder.partner.name ||
@ -5358,7 +5433,7 @@ export const resolvers = {
"Не указан",
minStock: Math.round(item.quantity * 0.1),
currentStock: item.quantity,
organizationId: existingOrder.fulfillmentCenterId,
organizationId: targetOrganizationId,
},
});
@ -5370,7 +5445,7 @@ export const resolvers = {
}
}
console.log("🎉 Склад фулфилмента успешно обновлен!");
console.log("🎉 Склад организации успешно обновлен!");
}
return {