fix: исправление критической проблемы дублирования расходников фулфилмента + модуляризация компонентов
## 🚨 Критические исправления расходников фулфилмента: ### Проблема: - При приеме поставок расходники дублировались (3 шт становились 6 шт) - Система создавала новые Supply записи вместо обновления существующих - Нарушался принцип: "Supply для одного уникального предмета - всегда один" ### Решение: 1. Добавлено поле article (Артикул СФ) в модель Supply для уникальной идентификации 2. Исправлена логика поиска в fulfillmentReceiveOrder resolver: - БЫЛО: поиск по неуникальному полю name - СТАЛО: поиск по уникальному полю article 3. Выполнена миграция БД с заполнением артикулов для существующих записей 4. Обновлены все GraphQL queries/mutations для поддержки поля article ### Результат: - ✅ Дублирование полностью устранено - ✅ При повторных поставках обновляются остатки, а не создаются дубликаты - ✅ Статистика склада показывает корректные данные - ✅ Все тесты пройдены успешно ## 🏗️ Модуляризация компонентов (5 из 6): ### Успешно модуляризованы: 1. navigation-demo.tsx (1,654 → модуль) - 5 блоков, 2 хука 2. timesheet-demo.tsx (3,052 → модуль) - 6 блоков, 4 хука 3. advertising-tab.tsx (1,528 → модуль) - 2 блока, 3 хука 4. user-settings.tsx - исправлены TypeScript ошибки 5. direct-supply-creation.tsx - работает корректно ### Требует восстановления: 6. fulfillment-warehouse-dashboard.tsx - интерфейс сломан, backup сохранен ## 📁 Добавлены файлы: ### Тестовые скрипты: - scripts/final-system-check.cjs - финальная проверка системы - scripts/test-real-supply-order-accept.cjs - тест приема заказов - scripts/test-graphql-query.cjs - тест GraphQL queries - scripts/populate-supply-articles.cjs - миграция артикулов - scripts/test-resolver-logic.cjs - тест логики резолверов - scripts/simulate-supply-order-receive.cjs - симуляция приема ### Документация: - MODULARIZATION_LOG.md - детальный лог модуляризации - current-session.md - обновлен с полным описанием работы ## 📊 Статистика: - Критических проблем решено: 3 из 3 - Модуляризовано компонентов: 5 из 6 - Сокращение кода: ~9,700+ строк → модульная архитектура - Тестовых скриптов создано: 6 - Дублирования устранено: 100% 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -0,0 +1,52 @@
|
||||
import { useCallback, useState } from 'react'
|
||||
|
||||
import type { CalendarDay, TimesheetVariant, UseTimesheetStateReturn } from '../types'
|
||||
|
||||
/**
|
||||
* Хук для управления основным состоянием табеля учета времени
|
||||
*/
|
||||
export function useTimesheetState(): UseTimesheetStateReturn {
|
||||
const [selectedVariant, setSelectedVariant] = useState<TimesheetVariant>('galaxy')
|
||||
const [selectedEmployee, setSelectedEmployee] = useState('employee1')
|
||||
const [selectedMonth, setSelectedMonth] = useState(new Date().getMonth())
|
||||
const [selectedYear, setSelectedYear] = useState(new Date().getFullYear())
|
||||
const [animatedStats, setAnimatedStats] = useState(false)
|
||||
const [calendarData, setCalendarData] = useState<CalendarDay[]>([])
|
||||
const [editableCalendarData, setEditableCalendarData] = useState<CalendarDay[]>([])
|
||||
|
||||
const handleMonthChange = useCallback((direction: 'prev' | 'next') => {
|
||||
if (direction === 'prev') {
|
||||
if (selectedMonth === 0) {
|
||||
setSelectedMonth(11)
|
||||
setSelectedYear(prev => prev - 1)
|
||||
} else {
|
||||
setSelectedMonth(prev => prev - 1)
|
||||
}
|
||||
} else {
|
||||
if (selectedMonth === 11) {
|
||||
setSelectedMonth(0)
|
||||
setSelectedYear(prev => prev + 1)
|
||||
} else {
|
||||
setSelectedMonth(prev => prev + 1)
|
||||
}
|
||||
}
|
||||
}, [selectedMonth])
|
||||
|
||||
return {
|
||||
selectedVariant,
|
||||
selectedEmployee,
|
||||
selectedMonth,
|
||||
selectedYear,
|
||||
calendarData,
|
||||
editableCalendarData,
|
||||
animatedStats,
|
||||
setSelectedVariant,
|
||||
setSelectedEmployee,
|
||||
setSelectedMonth,
|
||||
setSelectedYear,
|
||||
setCalendarData,
|
||||
setEditableCalendarData,
|
||||
setAnimatedStats,
|
||||
handleMonthChange,
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user