v1.2.5
patch от 23.09.2026
Задание 117. Реальные данные клиента загружены: страница товара показывает источник и движение
Импорт из первоисточника клиента
- app/Services/ImportSkladService.php - новый сервис импорта xlsx (листы продаж и складского остатка) с нормализацией ключей товаров: «Жареные бобы соль (1 кг)» ↔ «бобы соль 1», сопоставлением с каталогом, созданием новых товаров только при реальном несовпадении
- app/Console/Commands/ImportSkladCommand.php - artisan bober:import-sklad {--file=}: идемпотентный (движения с меткой file:2026-07-15 пересоздаются, товары обновляются, а не дублируются), с отчётом в консоли
- Лист «27-07-2026 Move» - демо-данные бота не загружаются; мусорная AI-строка с количеством 12 345 678 и служебные строки-итоги пропускаются
- Паллеты и остатки - 19 уникальных паллет («9 нов», «18 стар» и т.п., статус по тексту), остатки агрегируются по товару (например, «Бобы соль 1» = 251 упаковка из нескольких паллет)
- Движения - 222: поставки периода 1 и 2 (60 и 150+ упаковок с ценами из файла) и расходы по покупателям (Меликишвили, Лебедев, Афина, Гуднат, ИП Меликишвили и др.) с датами 01.06.2026 и 15.07.2026
Страница товара
- Источник данных - infolist-секция на странице товара (/admin/products/{id}): Файл-источник, Лист в файле, Строка в файле + примечание (данные из актуального файла клиента, цены в ₽)
- Движение товара - RepeatableEntry-таблица: Дата, Событие (Поставка / Заказ), Покупатель/документ, Кол-во шт, Сумма ₽; до 200 последних движений
- Валюта BYN→RUB - цены на страницах товаров (ProductResource, клиентский ProductResource), движений (MovementResource) и валюта по умолчанию в настройках переведены в рублёвые ₽
Версия
- config/app.php - 1.2.4 → 1.2.5
- config/instances.php - agent version 1.2.4 → 1.2.5
- resources/json/versions.json - добавлена запись 1.2.5
Тесты
- tests/Feature/ImportSkladTask117Test.php - 5 тестов: нормализация ключей, привязка строк продаж к каталогу, создание нового товара с ценой из файла, идемпотентность повторного импорта, страница товара (источник + движение)
← Ко всем версиям