Refactor: Replace wholesaler with supplier terminology and add fulfillment consumables logic
This commit is contained in:
@ -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}
|
||||
|
Reference in New Issue
Block a user