Refactor: Replace wholesaler with supplier terminology and add fulfillment consumables logic

This commit is contained in:
Veronika Smirnova
2025-07-30 17:03:31 +03:00
parent e351752b09
commit 3e7ea13026
31 changed files with 3343 additions and 1538 deletions

View File

@ -15,7 +15,8 @@ import {
GET_MY_COUNTERPARTIES,
GET_SUPPLY_ORDERS,
GET_WAREHOUSE_PRODUCTS,
GET_MY_SUPPLIES, // Добавляем импорт для загрузки расходников
GET_MY_SUPPLIES, // Расходники селлеров
GET_MY_FULFILLMENT_SUPPLIES, // Расходники фулфилмента
} from "@/graphql/queries";
import { toast } from "sonner";
import {
@ -198,7 +199,7 @@ export function FulfillmentWarehouseDashboard() {
fetchPolicy: "cache-and-network",
});
// Загружаем расходники фулфилмента
// Загружаем расходники селлеров
const {
data: suppliesData,
loading: suppliesLoading,
@ -208,6 +209,16 @@ export function FulfillmentWarehouseDashboard() {
fetchPolicy: "cache-and-network",
});
// Загружаем расходники фулфилмента
const {
data: fulfillmentSuppliesData,
loading: fulfillmentSuppliesLoading,
error: fulfillmentSuppliesError,
refetch: refetchFulfillmentSupplies,
} = useQuery(GET_MY_FULFILLMENT_SUPPLIES, {
fetchPolicy: "cache-and-network",
});
// Получаем данные магазинов, заказов и товаров
const allCounterparties = counterpartiesData?.myCounterparties || [];
const sellerPartners = allCounterparties.filter(
@ -215,7 +226,9 @@ export function FulfillmentWarehouseDashboard() {
);
const supplyOrders: SupplyOrder[] = ordersData?.supplyOrders || [];
const allProducts = productsData?.warehouseProducts || [];
const mySupplies = suppliesData?.mySupplies || []; // Добавляем расходники
const mySupplies = suppliesData?.mySupplies || []; // Расходники селлеров
const myFulfillmentSupplies =
fulfillmentSuppliesData?.myFulfillmentSupplies || []; // Расходники фулфилмента
// Логирование для отладки
console.log("🏪 Данные склада фулфилмента:", {
@ -391,37 +404,47 @@ export function FulfillmentWarehouseDashboard() {
0
);
// Подсчитываем расходники ФФ (расходники, которые получил фулфилмент-центр)
const fulfillmentConsumablesOrders = supplyOrders.filter((order) => {
// Заказы где текущий фулфилмент-центр является получателем
const isRecipient =
order.fulfillmentCenter?.id === user?.organization?.id;
// НО создатель заказа НЕ мы (т.е. селлер создал заказ для нас)
const isCreatedByOther =
order.organization?.id !== user?.organization?.id;
// И статус DELIVERED (получено)
const isDelivered = order.status === "DELIVERED";
return isRecipient && isCreatedByOther && isDelivered;
});
// Подсчитываем общее количество расходников ФФ из доставленных заказов
const totalFulfillmentSupplies = fulfillmentConsumablesOrders.reduce(
(sum, order) => sum + (order.totalItems || 0),
// Подсчитываем расходники фулфилмента из нового резолвера
// Основное значение = текущий остаток на складе
const totalFulfillmentSupplies = myFulfillmentSupplies.reduce(
(sum: number, supply: any) => sum + (supply.currentStock || 0),
0
);
// Подсчитываем изменения за сегодня (расходники ФФ, полученные сегодня)
// Дополнительные значения - динамика за сегодня
const today = new Date();
today.setHours(0, 0, 0, 0);
const fulfillmentSuppliesReceivedToday = fulfillmentConsumablesOrders
.filter((order) => {
const orderDate = new Date(order.updatedAt || order.createdAt);
orderDate.setHours(0, 0, 0, 0);
return orderDate.getTime() === today.getTime();
// Поставлено сегодня (дополнительное значение +)
const fulfillmentSuppliesReceivedToday = myFulfillmentSupplies
.filter((supply: any) => {
const supplyDate = new Date(supply.updatedAt || supply.createdAt);
supplyDate.setHours(0, 0, 0, 0);
return (
supplyDate.getTime() === today.getTime() &&
supply.status === "available"
);
})
.reduce((sum, order) => sum + (order.totalItems || 0), 0);
.reduce(
(sum: number, supply: any) => sum + (supply.quantity || 0), // Поставленное количество
0
);
// Использовано сегодня (дополнительное значение -)
const fulfillmentSuppliesUsedToday = myFulfillmentSupplies
.filter((supply: any) => {
const supplyDate = new Date(supply.updatedAt || supply.createdAt);
supplyDate.setHours(0, 0, 0, 0);
return supplyDate.getTime() === today.getTime();
})
.reduce(
(sum: number, supply: any) => sum + (supply.usedStock || 0), // Использованное количество
0
);
// Итоговое изменение = поставлено - использовано
const fulfillmentSuppliesChange =
fulfillmentSuppliesReceivedToday - fulfillmentSuppliesUsedToday;
return {
products: {
@ -441,8 +464,8 @@ export function FulfillmentWarehouseDashboard() {
change: 0, // Нет реальных данных об изменениях возвратов
},
fulfillmentSupplies: {
current: totalFulfillmentSupplies, // Реальное количество расходников ФФ
change: fulfillmentSuppliesReceivedToday, // Расходники ФФ, полученные сегодня
current: totalFulfillmentSupplies, // Основное значение: текущий остаток на складе
change: fulfillmentSuppliesChange, // Дополнительное значение: поставлено - использовано за сегодня
},
sellerSupplies: {
current: totalSellerSupplies, // Реальное количество расходников селлера из базы
@ -1245,7 +1268,7 @@ export function FulfillmentWarehouseDashboard() {
description="К обработке"
/>
<StatCard
title="Расходники ФФ"
title="Расходники фулфилмента"
icon={Wrench}
current={warehouseStats.fulfillmentSupplies.current}
change={warehouseStats.fulfillmentSupplies.change}