Цель: Создать веб-модуль для управления каталогом запчастей, учёта их наличия на складе, обработки заказов на пополнение и автоматического списания при использовании в рекламациях. 1. Общее описание системы В системе три роли пользователей: Администратор: Полный доступ ко всем функциям (добавление, редактирование, удаление, импорт/экспорт). Менеджер: Только просмотр каталога и списка заказов. Не видит цену закупки. Бригадир: Полностью не имеет доступа к данному модулю (не видит ни каталог, ни заказы). Основные сущности: Каталог запчастей, Заказы деталей, Контроль наличия. Данные тесно связаны: остатки в каталоге автоматически считаются из заказов, а списание происходит при добавлении детали в рекламации. Важное правило: Экспорт и импорт данных (каталога, заказов) должны сохранять и восстанавливать все связанные данные, включая связи (например, между артикулом и его картинкой, кодами и их расшифровками), чтобы обеспечить целостность системы после переноса данных. 2. Модуль 1: Каталог запчастей Назначение: Единый справочник всех запчастей. Структура записи (столбцы таблицы): Картинка: Автоподгрузка с сервера по артикулу или ручная загрузка. Артикул детали: Уникальный идентификатор. Заполняется через форму или импорт. Где используется (Артикул МАФ): Связь с основной номенклатурой. Может быть пустым. Кол-во Общее: Вычисляемое поле = Кол-во без документов + Кол-во с документами. Кликабельно. При клике открывает вкладку "Заказы деталей" с фильтром по этому артикулу и статусом "На складе". Кол-во без документов: Вычисляемое поле. Сумма остатков (Остаток > 0) из вкладки "Заказы деталей" для этого артикула, где С документами = "НЕТ" и Статус = "На складе". Кликабельно. При клике открывает "Заказы деталей" с фильтром: артикул, Остаток > 0, С документами = "НЕТ", Статус = "На складе". Кол-во с документами: Вычисляемое поле. Сумма остатков (Остаток > 0) из вкладки "Заказы деталей" для этого артикула, где С документами = "ДА" и Статус = "На складе". Кликабельно. При клике открывает "Заказы деталей" с фильтром: артикул, Остаток > 0, С документами = "ДА", Статус = "На складе". Примечание: Руководящее поле. Цена закупки: Только для Администратора. Скрыта для других ролей. Цена для заказчика: Руководящее/импортируемое поле. Цена экспертизы: Руководящее/импортируемое поле. № по ТСН: Руководящее/импортируемое поле. Шифр расценки и коды ресурсов: Может содержать несколько кодов (например, "11.2457.24/14"). Руководящее/импортируемое поле. Функционал: Редактирование: При клике на строку открывается форма редактирования, где можно менять только поля: Примечание, Где используется, Цена закупки, Цена для заказчика, Цена экспертизы, № по ТСН, Шифр расценки. Импорт/Экспорт: Аналогично существующему модулю "Каталог МАФ" (ДКР). Ключевое требование: При импорте данных (например, из файла предыдущего экспорта) система должна корректно обрабатывать и сохранять все связанные данные (ссылки на картинки, связи артикулов, записи в справочнике расшифровок кодов). При экспорте — выгружать данные в формате, пригодном для последующего целостного импорта. Расшифровка кодов (для полей 11 и 12): Создать отдельный справочник "Расшифровка расценок" с полями: КОД, Расшифровка. Реализовать подсказку (tooltip) при наведении курсора на код в каталоге, отображающую его расшифровку из справочника. Связь с импортом/экспортом: При импорте каталога, если в файле встречаются новые коды, отсутствующие в справочнике, система должна предлагать пользователю (Администратору) добавить их расшифровку или создать записи с пустым полем "Расшифровка". 3. Модуль 2: Список заказов деталей Назначение: Учёт партий запчастей, поступивших на склад или ожидаемых. Структура записи: Картинка: Берётся из Каталога по артикулу. Артикул детали: Ссылка на запись в Каталоге. Источник заказа (площадка/рекламация): Цель: Указать, для какого объекта или случая сделан заказ. Связь с сущностями "Площадки" и "Рекламации" НЕОБЯЗАТЕЛЬНА. Реализация: Поле ввода с возможностью: Свободного ввода текста (например, "Складской запас", "Договор №XXX"). Поиска и выбора существующей Площадки из системы (через выпадающий список с автодополнением). Поиска и выбора существующей Рекламации из системы (через выпадающий список с автодополнением). В таблице отображается текстовое представление выбранного объекта (название площадки, номер рекламации) или введённый вручную текст. Статус: Выбор из трёх значений: Заказано, На складе, Отгружено. Логика статусов: При создании - Заказано. При ручном изменении на На складе - детали учитываются в остатках каталога. Когда Остаток становится 0 - статус автоматически меняется на Отгружено. Заказано: Исходное количество в заказе. Остаток: Текущее количество, оставшееся в этом заказе (уменьшается при списании в рекламации). С документами: Чекбокс "ДА"/"НЕТ". Примечание: Руководящее поле. Детальная карточка заказа: Открывается по клику на строку. Позволяет редактировать все поля. История списаний: Блок, отображающий, сколько, когда и куда (примечание из окна списания, например, "Рекламация №ХХХ") было отгружено деталей из этого заказа. Кнопка "Отгрузить": При нажатии открывает модальное окно с полями: Количество (для списания) и Примечание (куда/для чего забирается, например, номер рекламации). После подтверждения: Значение Остаток в заказе уменьшается на указанное количество. В блоке истории списаний добавляется запись с указанным количеством и примечанием. 4. Интеграция с рекламациями (модификация существующего функционала) Добавление детали в рекламацию: Поле для ввода детали должно быть с автодополнением (typeahead). При вводе артикула предлагаются варианты только из Каталога запчастей. Добавить чекбокс "С документами" рядом с полем выбора детали. Логика списания при сохранении рекламации: Система получает артикул детали, необходимое количество и признак "С документами". Поиск заказа для списания: В модуле "Заказы деталей" ищется заказ с данным артикулом, где С документами соответствует запрошенному признаку, Статус = "На складе" и Остаток > 0. Списание происходит из найденного заказа (уменьшается Остаток). Важно: В историю списаний этого заказа автоматически добавляется запись: "Автоматическое списание для рекламации: [НОМЕР_ТЕКУЩЕЙ_РЕКЛАМАЦИИ]". Если подходящего заказа не найдено: В Каталоге в соответствующей колонке (Кол-во с документами или Кол-во без документов) значение становится отрицательным (например, -1 или -запрашиваемое_количество). Данная позиция автоматически попадает во вкладку "Контроль наличия". 5. Модуль 3: Контроль наличия Назначение: Панель мониторинга проблем с наличием. Данные формируются автоматически, редактирование записей недоступно. Источники данных и логика формирования: Правило 1 (Критический недостаток): Вывести все детали, у которых в Каталоге значение в колонках Кол-во без документов ИЛИ Кол-во с документами меньше 0. Выделить строку красным. В столбце "Примечание" системы написать: "Отсутствие детали". Правило 2 (Минимальный остаток): В Каталоге добавить скрытое (или отображаемое) поле "Минимальный остаток" для каждой детали (по умолчанию 0). Если в Каталоге Кол-во Общее (или одна из детализированных колонок, в зависимости от политики) станет меньше значения "Минимальный остаток" - вывести деталь в этот модуль. Выделить строку желтым. В примечании: "Достигнут лимит минимального остатка (X шт)", где X - значение минимального остатка. Колонки: Картинка, Артикул, Кол-во для заказа (сколько не хватает, т.е. модуль отрицательного значения из Каталога), Примечание (системное). Логика снятия уведомления: Уведомление из этого модуля автоматически снимается, когда условие, вызвавшее его, перестаёт выполняться. Например: Для "отсутствия" (-N) — когда появляется заказ с этой деталью и статусом На складе или Заказано, который может покрыть недостачу (остаток в заказе >= недостающему количеству). После этого отрицательное значение в каталоге обнуляется или становится положительным. Для "минимального остатка" — когда Кол-во Общее становится >= значению "Минимальный остаток". 6. Требования к интерфейсу Вкладки: "Каталог запчастей", "Заказы деталей", "Контроль наличия". Таблицы с сортировкой, фильтрацией и кликабельными ячейками, как указано выше. Единый стиль с существующей платформой (логика работы кнопок, модальных окон, импорта/экспорта).