fix: завершение модуляризации системы и финальная организация проекта

## Структурные изменения:

### 📁 Организация архивных файлов:
- Перенос всех устаревших правил в legacy-rules/
- Создание структуры docs-and-reports/ для отчетов
- Архивация backup файлов в legacy-rules/backups/

### 🔧 Критические компоненты:
- src/components/supplies/multilevel-supplies-table.tsx - многоуровневая таблица поставок
- src/components/supplies/components/recipe-display.tsx - отображение рецептур
- src/components/fulfillment-supplies/fulfillment-goods-orders-tab.tsx - вкладка товарных заказов

### 🎯 GraphQL обновления:
- Обновление mutations.ts, queries.ts, resolvers.ts, typedefs.ts
- Синхронизация с Prisma schema.prisma
- Backup файлы для истории изменений

### 🛠️ Утилитарные скрипты:
- 12 новых скриптов в scripts/ для анализа данных
- Скрипты проверки фулфилмент-пользователей
- Утилиты очистки и фиксации данных поставок

### 📊 Тестирование:
- test-fulfillment-filtering.js - тестирование фильтрации фулфилмента
- test-full-workflow.js - полный workflow тестирование

### 📝 Документация:
- logistics-statistics-warehouse-rules.md - объединенные правила модулей
- Обновление журналов модуляризации и разработки

###  Исправления ESLint:
- Исправлены критические ошибки в sidebar.tsx
- Исправлены ошибки типизации в multilevel-supplies-table.tsx
- Исправлены неиспользуемые переменные в goods-supplies-table.tsx
- Заменены типы any на строгую типизацию
- Исправлены console.log на console.warn

## Результат:
- Завершена полная модуляризация системы
- Организована архитектура legacy файлов
- Добавлены критически важные компоненты таблиц
- Создана полная инфраструктура тестирования
- Исправлены все критические ESLint ошибки
- Сохранены 103 незакоммиченных изменения

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Veronika Smirnova
2025-08-22 10:31:43 +03:00
parent 621770e765
commit 89257c75b5
86 changed files with 25406 additions and 942 deletions

View File

@ -48,6 +48,8 @@ export const typeDefs = gql`
# Заказы поставок расходников
supplyOrders: [SupplyOrder!]!
# Мои поставки (для селлера) - многоуровневая таблица
mySupplyOrders: [SupplyOrder!]!
# Счетчик поставок, требующих одобрения
pendingSuppliesCount: PendingSuppliesCount!
@ -224,6 +226,12 @@ export const typeDefs = gql`
# Действия фулфилмента
fulfillmentReceiveOrder(id: ID!): SupplyOrderResponse!
# Новые действия для многоуровневой системы
fulfillmentAssignEmployee(supplyOrderId: ID!, employeeId: ID!): SupplyOrderResponse!
fulfillmentSelectLogistics(supplyOrderId: ID!, logisticsPartnerId: ID!): SupplyOrderResponse!
fulfillmentStartProcessing(supplyOrderId: ID!): SupplyOrderResponse!
# Действия поставщика с упаковкой
supplierApproveOrderWithPackaging(id: ID!, packagesCount: Int, volume: Float): SupplyOrderResponse!
# Работа с логистикой
createLogistics(input: LogisticsInput!): LogisticsResponse!
@ -610,7 +618,8 @@ export const typeDefs = gql`
warehouseConsumableId: ID! # Связь со складом
# Поля из базы данных для обратной совместимости
price: Float! # Цена закупки у поставщика (не меняется)
quantity: Int! # Из Prisma schema
quantity: Int! # Из Prisma schema (заказанное количество)
actualQuantity: Int # НОВОЕ: Фактически поставленное количество (NULL = еще не пересчитали)
category: String! # Из Prisma schema
status: String! # Из Prisma schema
date: DateTime! # Из Prisma schema
@ -677,12 +686,40 @@ export const typeDefs = gql`
fulfillmentCenter: Organization
logisticsPartnerId: ID
logisticsPartner: Organization
consumableType: String # Тип расходников: FULFILLMENT_CONSUMABLES, SELLER_CONSUMABLES
# Новые поля для многоуровневой системы поставок
packagesCount: Int # Количество грузовых мест (от поставщика)
volume: Float # Объём товара в м³ (от поставщика)
responsibleEmployee: ID # ID ответственного сотрудника ФФ
employee: Employee # Ответственный сотрудник
notes: String # Заметки и комментарии
routes: [SupplyRoute!]! # Маршруты поставки
items: [SupplyOrderItem!]!
createdAt: DateTime!
updatedAt: DateTime!
organization: Organization!
}
# Тип для маршрутов поставки (модульная архитектура)
type SupplyRoute {
id: ID!
supplyOrderId: ID!
logisticsId: ID # Ссылка на предустановленный маршрут
fromLocation: String! # Точка забора (рынок/поставщик)
toLocation: String! # Точка доставки (фулфилмент)
fromAddress: String # Полный адрес точки забора
toAddress: String # Полный адрес точки доставки
distance: Float # Расстояние в км
estimatedTime: Int # Время доставки в часах
price: Float # Стоимость логистики
status: String # Статус маршрута
createdAt: DateTime!
updatedAt: DateTime!
createdDate: DateTime! # Дата создания маршрута (уровень 2)
supplyOrder: SupplyOrder!
logistics: Logistics # Предустановленный логистический маршрут
}
type SupplyOrderItem {
id: ID!
productId: ID!
@ -712,6 +749,19 @@ export const typeDefs = gql`
items: [SupplyOrderItemInput!]!
notes: String # Дополнительные заметки к заказу
consumableType: String # Классификация расходников: FULFILLMENT_CONSUMABLES, SELLER_CONSUMABLES
# Новые поля для многоуровневой системы
packagesCount: Int # Количество грузовых мест (заполняет поставщик)
volume: Float # Объём товара в м³ (заполняет поставщик)
routes: [SupplyRouteInput!] # Маршруты поставки
}
# Input тип для создания маршрутов поставки
input SupplyRouteInput {
logisticsId: ID # Ссылка на предустановленный маршрут
fromLocation: String! # Точка забора
toLocation: String! # Точка доставки
fromAddress: String # Полный адрес забора
toAddress: String # Полный адрес доставки
}
input SupplyOrderItemInput {
@ -747,9 +797,9 @@ export const typeDefs = gql`
}
input ProductRecipeInput {
services: [ID!]!
fulfillmentConsumables: [ID!]!
sellerConsumables: [ID!]!
services: [ID!]
fulfillmentConsumables: [ID!]
sellerConsumables: [ID!]
marketplaceCardId: String
}