# Улучшения модуля запчастей ## Реализованные изменения ### 1. Фильтры в таблицах запчастей - ✅ Все таблицы в разделе запчастей (каталог, заказы, инвентаризация) теперь используют `partials/table.blade.php` - ✅ Добавлены полноценные фильтры по колонкам - ✅ Добавлен поиск по тексту - ✅ Добавлены настройки отображения колонок - ✅ Добавлена сортировка ### 2. Справочник расценок - ✅ Создана миграция `2026_01_24_120000_update_pricing_codes_table_add_type_field.php` для добавления поля `type` - ✅ Обновлена модель `PricingCode` с методами: - `getTsnDescription()` - получение расшифровки № по ТСН - `getPricingCodeDescription()` - получение расшифровки шифра расценки - `createOrUpdate()` - создание или обновление записи справочника - ✅ Добавлены аксессоры в модель `SparePart`: - `tsn_number_description` - расшифровка № по ТСН - `pricing_code_description` - расшифровка шифра расценки ### 3. Tooltips для расценок - ✅ При наведении на поля `tsn_number` и `pricing_code` в таблице показывается расшифровка - ✅ Используется Bootstrap tooltips - ✅ Подсветка полей с расшифровкой (dotted underline) ### 4. Автозаполнение в форме запчастей - ✅ При вводе № по ТСН автоматически подтягивается расшифровка из справочника - ✅ При вводе шифра расценки автоматически подтягивается расшифровка - ✅ Если расшифровка не найдена, появляется поле для ввода новой расшифровки - ✅ Новая расшифровка сохраняется в справочник при сохранении запчасти - ✅ Визуальная индикация (иконки и цвета): - Зелёная иконка - расшифровка найдена - Жёлтая иконка - расшифровка не найдена - ✅ API endpoint `/pricing-codes/get-description` для получения расшифровок ### 5. Экспорт и импорт справочника расценок - ✅ Обновлён `ExportSparePartsService` для экспорта справочника на отдельной вкладке "Справочник расценок" - ✅ Создан `ImportSparePartsService` для импорта каталога и справочника - ✅ Создан `ImportSparePartsJob` для асинхронного импорта - ✅ Добавлен метод `import()` в `SparePartController` - ✅ Добавлен роут `/spare-parts/import` - ✅ Добавлена кнопка "Импорт" и модальное окно в интерфейсе ## Структура файла экспорта ### Вкладка 1: Каталог запчастей Колонки: - A: ID - B: Артикул - C: Где используется - D: Кол-во без док - E: Кол-во с док - F: Кол-во общее - G: Примечание - H: Цена закупки - I: Цена для заказчика - J: Цена экспертизы - K: № по ТСН - L: Шифр расценки - M: Минимальный остаток ### Вкладка 2: Справочник расценок Колонки: - A: ID - B: Тип (№ по ТСН / Шифр расценки) - C: Код - D: Расшифровка ## Файлы с изменениями ### Модели - `app/Models/PricingCode.php` - обновлён - `app/Models/SparePart.php` - добавлены аксессоры для расшифровок ### Миграции - `database/migrations/2026_01_24_120000_update_pricing_codes_table_add_type_field.php` - новая ### Контроллеры - `app/Http/Controllers/SparePartController.php` - добавлен метод import() - `app/Http/Controllers/SparePartOrderController.php` - добавлен routeName - `app/Http/Controllers/PricingCodeController.php` - добавлен метод getDescription() ### Requests - `app/Http/Requests/StoreSparePartRequest.php` - добавлена обработка расшифровок ### Services - `app/Services/Export/ExportSparePartsService.php` - добавлен экспорт справочника - `app/Services/Import/ImportSparePartsService.php` - новый ### Jobs - `app/Jobs/Import/ImportSparePartsJob.php` - новый ### Views - `resources/views/spare_parts/index.blade.php` - использование partials/table, добавлена кнопка импорта - `resources/views/spare_parts/edit.blade.php` - добавлено автозаполнение расшифровок - `resources/views/partials/table.blade.php` - добавлены tooltips для tsn_number и pricing_code ### Routes - `routes/web.php` - добавлен роут для импорта и API для получения расшифровок ## Применение изменений 1. Запустить миграцию: ```bash php artisan migrate ``` 2. Перезапустить queue worker: ```bash php artisan queue:restart ``` 3. Очистить кэш (опционально): ```bash php artisan cache:clear php artisan config:clear php artisan view:clear ``` ## Примечания - Справочник расценок теперь поддерживает два типа записей: `tsn_number` и `pricing_code` - Уникальность записей гарантируется комбинацией `type` + `code` - Импорт обновляет существующие записи и создаёт новые - Экспорт включает все записи справочника на отдельной вкладке - Все операции импорта/экспорта выполняются асинхронно через очереди