]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/log
erp24_rep/yii-erp24/.git
5 weeks agodeploy: рестарт yii-queue воркеров после reload php-fpm origin/feature_filippov_20260507_deploy_queue_restart
Aleksey Filippov [Thu, 7 May 2026 14:46:15 +0000 (17:46 +0300)]
deploy: рестарт yii-queue воркеров после reload php-fpm

Воркеры yii queue/listen читают .env один раз при старте и кэшируют
vendor/autoload в памяти. Без принудительного рестарта они продолжают
работать с прежними токенами/кодом задач — и любое изменение в .env
или коде джоб до них не доедет.

Инцидент 2026-05-07: после ротации TELEGRAM_BOT_TOKEN_PROD в @BotFather
воркеры с uptime 68 дней (last restart Feb27) продолжали слать с
отозванным токеном, выдавая 401 Unauthorized — ERP молча терял все
уведомления клиентам с 21.04 по 07.05.

Дополнительно убиваются orphan-процессы yii queue/listen с PPID=1:
такие появляются, если supervisor когда-то рестартовали без graceful
stop детей — supervisorctl restart их НЕ трогает, а они продолжают
слушать очередь со старым окружением. На erpp 2026-05-07 жили ровно
10 таких orphan'ов от Feb27 параллельно с новыми воркерами.

Изменения:
- erp24/scripts/server/activate-release.sh  +31
- erp24/scripts/server/rollback.sh          +20
- erp24/scripts/local/deploy-to-prod.sh     +25

5 weeks agoMerge branch 'feature_fomichev_erp_2025_sales_api_endpoint_api2' into 'develop'
Aleksey Filippov [Wed, 6 May 2026 13:02:13 +0000 (13:02 +0000)]
Merge branch 'feature_fomichev_erp_2025_sales_api_endpoint_api2' into 'develop'

api эндпоинты для транскрибации

See merge request gitlab-instance/yii-erp24!1140

5 weeks agoMerge branch 'feature_fomichev_ERP-292_automarkup' into 'develop'
Aleksey Filippov [Wed, 6 May 2026 13:01:25 +0000 (13:01 +0000)]
Merge branch 'feature_fomichev_ERP-292_automarkup' into 'develop'

feat(ERP-292): RuleBasedParser — словарный парсинг имени товара

See merge request gitlab-instance/yii-erp24!1160

5 weeks agoПравки по ревью origin/feature_fomichev_erp_2025_sales_api_endpoint_api2
fomichev [Wed, 6 May 2026 12:33:18 +0000 (15:33 +0300)]
Правки по ревью

5 weeks agoreview fixes 2 feature_fomichev_ERP-292_automarkup origin/feature_fomichev_ERP-292_automarkup
fomichev [Wed, 6 May 2026 08:16:35 +0000 (11:16 +0300)]
review fixes 2

5 weeks agoreview fixes
fomichev [Wed, 6 May 2026 07:39:06 +0000 (10:39 +0300)]
review fixes

5 weeks agollm verification migration fix
fomichev [Tue, 5 May 2026 10:24:53 +0000 (13:24 +0300)]
llm verification migration fix

5 weeks agollm verification fixes
fomichev [Tue, 5 May 2026 09:19:41 +0000 (12:19 +0300)]
llm verification fixes

6 weeks agollm verification
fomichev [Mon, 4 May 2026 15:22:25 +0000 (18:22 +0300)]
llm verification

6 weeks agollm verification
fomichev [Mon, 4 May 2026 08:31:10 +0000 (11:31 +0300)]
llm verification

6 weeks agofeat(ERP-292): консольная команда verify-llm, триггер в run-new
fomichev [Thu, 30 Apr 2026 15:24:16 +0000 (18:24 +0300)]
feat(ERP-292): консольная команда verify-llm, триггер в run-new

6 weeks agofeat(ERP-292): AutoMarkService — llmBatchVerify, getPendingUnverifiedCount
fomichev [Thu, 30 Apr 2026 15:23:56 +0000 (18:23 +0300)]
feat(ERP-292): AutoMarkService — llmBatchVerify, getPendingUnverifiedCount

6 weeks agofeat(ERP-292): LlmVerifier — батчинг, обогащение примерами, парсинг вердиктов
fomichev [Thu, 30 Apr 2026 15:22:30 +0000 (18:22 +0300)]
feat(ERP-292): LlmVerifier — батчинг, обогащение примерами, парсинг вердиктов

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 weeks agofeat(ERP-292): LlmClient — HTTP-клиент и парсинг ответа
fomichev [Thu, 30 Apr 2026 15:18:58 +0000 (18:18 +0300)]
feat(ERP-292): LlmClient — HTTP-клиент и парсинг ответа

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
6 weeks agofeat(ERP-292): модель — METHOD_LLM, llm_verdict поля и валидация
fomichev [Thu, 30 Apr 2026 15:08:09 +0000 (18:08 +0300)]
feat(ERP-292): модель — METHOD_LLM, llm_verdict поля и валидация

6 weeks agofeat(ERP-292): LlmVerifyResult DTO
fomichev [Thu, 30 Apr 2026 15:07:48 +0000 (18:07 +0300)]
feat(ERP-292): LlmVerifyResult DTO

6 weeks agofeat(ERP-292): миграция — llm_verdict, llm_verified_at, llm_comment
fomichev [Thu, 30 Apr 2026 15:06:30 +0000 (18:06 +0300)]
feat(ERP-292): миграция — llm_verdict, llm_verified_at, llm_comment

6 weeks agoMerge branch 'fix_filippov_ERP-372_avg_check_dashboard' into 'develop'
Aleksey Filippov [Thu, 30 Apr 2026 09:21:22 +0000 (09:21 +0000)]
Merge branch 'fix_filippov_ERP-372_avg_check_dashboard' into 'develop'

test(ERP-372): добавить тесты для getSalesCountSum

See merge request gitlab-instance/yii-erp24!1162

6 weeks agofix(ERP-372): синхронизировать фильтры getSalesCountSum с getSalesSum
Aleksey Filippov [Thu, 30 Apr 2026 08:04:00 +0000 (11:04 +0300)]
fix(ERP-372): синхронизировать фильтры getSalesCountSum с getSalesSum

На дашборде /dashboard/sales для магазинов с большой долей доставки
(например, 07 Аэродромная 28) средний чек расходился с суммой продаж:
avg = sum_count_query / cnt_count_query, при этом колонка «сумма продаж»
показывала результат другого запроса (getSalesSum) с более узким
фильтром.

Привожу getSalesCountSum к тем же условиям:
- LEFT JOIN sales sc ON sc.id = s.sales_check
- sc.order_id IS NULL OR IN ('','0')   — отбрасываем строки, привязанные
  через sales_check к доставочной продаже;
- s.marketplace_order_id IS NULL OR =''  — отбрасываем продажи маркетплейсов.

После фикса avg = sum / cnt совпадает с тем, что выводится в колонке
«сумма продаж».

Тесты (9/9 GREEN): unit на структуру SQL и биндинг параметров +
интеграционные на реальной БД (insert/rollback в транзакции),
проверяющие исключение маркетплейс- и доставочно-связанных продаж.

6 weeks agotest(ERP-372): добавить тесты для getSalesCountSum
Aleksey Filippov [Thu, 30 Apr 2026 07:42:41 +0000 (10:42 +0300)]
test(ERP-372): добавить тесты для getSalesCountSum

Unit-тесты на SQL-структуру, биндинг параметров, payType-ветку
и пустой результат. Интеграционный тест на реальной БД проверяет,
что метод исключает маркетплейс-продажи и записи, связанные через
sales_check с доставкой. На текущем (нефиксенном) коде воспроизводят
баг — RED-состояние перед применением правки.

6 weeks agoMerge branch 'feature_filippov_task22_widen_sync_window_to_4months' into 'develop'
Aleksey Filippov [Wed, 29 Apr 2026 20:40:10 +0000 (20:40 +0000)]
Merge branch 'feature_filippov_task22_widen_sync_window_to_4months' into 'develop'

fix(task_22): расширить окно выборки админов с 1 до 4 месяцев

See merge request gitlab-instance/yii-erp24!1161

6 weeks agofix(task_22): расширить окно выборки админов с 1 до 4 месяцев origin/feature_filippov_task22_widen_sync_window_to_4months
Aleksey Filippov [Wed, 29 Apr 2026 20:29:06 +0000 (23:29 +0300)]
fix(task_22): расширить окно выборки админов с 1 до 4 месяцев

Сотрудники с пустым guid выпадали из синхронизации с 1С после месяца —
расширяем окно date_add до 4 месяцев. Добавлена документация по каналу
ERP→1С create_employee (pull через API2 DataController::actionRequest).

7 weeks agoMerge branch 'feature_fomichev_ERP-300J_suppliers_dict' into 'develop'
Aleksey Filippov [Wed, 22 Apr 2026 09:35:40 +0000 (09:35 +0000)]
Merge branch 'feature_fomichev_ERP-300J_suppliers_dict' into 'develop'

feat(ERP-300): справочник закупщика

See merge request gitlab-instance/yii-erp24!1159

7 weeks agofeat: добавить группу 82 (менеджер контроля качества) в RBAC ERP-300 feature_fomichev_ERP-300J_suppliers_dict origin/feature_fomichev_ERP-300J_suppliers_dict
fomichev [Wed, 22 Apr 2026 09:04:29 +0000 (12:04 +0300)]
feat: добавить группу 82 (менеджер контроля качества) в RBAC ERP-300

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 weeks agofix: подсказка кнопки экспорта — .xlsx → .csv
fomichev [Wed, 22 Apr 2026 08:40:24 +0000 (11:40 +0300)]
fix: подсказка кнопки экспорта — .xlsx → .csv

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 weeks agofix: экспорт — убрать sendFile(), отдавать CSV через response->content
fomichev [Wed, 22 Apr 2026 08:34:02 +0000 (11:34 +0300)]
fix: экспорт — убрать sendFile(), отдавать CSV через response->content

sendFile() конфликтовал с nginx на сервере. Теперь CSV генерируется
в php://temp и отдаётся напрямую через FORMAT_RAW без файла на диске.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 weeks agofix: экспорт — один JOIN-запрос со скалярами вместо AR + eager loading
fomichev [Wed, 22 Apr 2026 08:24:49 +0000 (11:24 +0300)]
fix: экспорт — один JOIN-запрос со скалярами вместо AR + eager loading

Убирает OOM: GUID-ы фильтруются отдельно, данные — одним SQL с
STRING_AGG для маркировок. Никаких ActiveRecord-объектов в памяти.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 weeks agofix: экспорт маппинга переведён с XLSX на CSV
fomichev [Wed, 22 Apr 2026 08:04:26 +0000 (11:04 +0300)]
fix: экспорт маппинга переведён с XLSX на CSV

PhpSpreadsheet роняет процесс по памяти на больших выборках.
CSV: нет зависимостей, минимум памяти, UTF-8 BOM для Excel.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 weeks agofix: заменить yii.getCsrfToken() на meta[csrf-token] во всех модулях buyer-reference
fomichev [Wed, 22 Apr 2026 08:00:49 +0000 (11:00 +0300)]
fix: заменить yii.getCsrfToken() на meta[csrf-token] во всех модулях buyer-reference

yii объект недоступен в контексте внешних JS-файлов. Читаем токен напрямую
из <meta name="csrf-token"> — так же работает во всех браузерах.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 weeks agofix: перехват ошибки экспорта — возврат JSON вместо 500
fomichev [Wed, 22 Apr 2026 07:57:40 +0000 (10:57 +0300)]
fix: перехват ошибки экспорта — возврат JSON вместо 500

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 weeks agofix: правильный регистр исключённых категорий (строчные буквы)
fomichev [Wed, 22 Apr 2026 07:52:57 +0000 (10:52 +0300)]
fix: правильный регистр исключённых категорий (строчные буквы)

В БД категории хранятся строчными: 'букет', 'сборка', 'сервис'.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 weeks agofix: фильтрация категорий Букет/Сборка/Сервис после кэша
fomichev [Wed, 22 Apr 2026 07:46:39 +0000 (10:46 +0300)]
fix: фильтрация категорий Букет/Сборка/Сервис после кэша

Перенесена фильтрация исключённых категорий из SQL-запроса внутри кэша
в PHP-фильтр после getOrSet — работает немедленно независимо от состояния кэша.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7 weeks agofix cache
fomichev [Wed, 22 Apr 2026 07:43:55 +0000 (10:43 +0300)]
fix cache

7 weeks agofix mapping
fomichev [Wed, 22 Apr 2026 07:29:26 +0000 (10:29 +0300)]
fix mapping

7 weeks agofix marking
fomichev [Wed, 22 Apr 2026 07:13:27 +0000 (10:13 +0300)]
fix marking

7 weeks agofix producer
fomichev [Wed, 22 Apr 2026 07:03:22 +0000 (10:03 +0300)]
fix producer

7 weeks agofix plantation
fomichev [Wed, 22 Apr 2026 06:48:20 +0000 (09:48 +0300)]
fix plantation

7 weeks agofix plantation
fomichev [Wed, 22 Apr 2026 06:32:56 +0000 (09:32 +0300)]
fix plantation

7 weeks agodelete
fomichev [Tue, 21 Apr 2026 14:01:26 +0000 (17:01 +0300)]
delete

7 weeks agomigration
fomichev [Tue, 21 Apr 2026 12:58:08 +0000 (15:58 +0300)]
migration

7 weeks agofix button
fomichev [Tue, 21 Apr 2026 12:36:47 +0000 (15:36 +0300)]
fix button

7 weeks agofix button
fomichev [Tue, 21 Apr 2026 12:20:54 +0000 (15:20 +0300)]
fix button

7 weeks agofix button
fomichev [Tue, 21 Apr 2026 12:18:37 +0000 (15:18 +0300)]
fix button

7 weeks agoфикс появления после создания
fomichev [Tue, 21 Apr 2026 10:19:41 +0000 (13:19 +0300)]
фикс появления после создания

7 weeks agoфикс удаления
fomichev [Tue, 21 Apr 2026 08:36:43 +0000 (11:36 +0300)]
фикс удаления

7 weeks agoфикс удаления
fomichev [Tue, 21 Apr 2026 06:56:40 +0000 (09:56 +0300)]
фикс удаления

7 weeks agoфикс вкладки
fomichev [Tue, 21 Apr 2026 06:56:09 +0000 (09:56 +0300)]
фикс вкладки

8 weeks agofix(ERP-292): critical fixes — транзакции, типы, FK drop, use imports, XSS
fomichev [Fri, 17 Apr 2026 14:28:33 +0000 (17:28 +0300)]
fix(ERP-292): critical fixes — транзакции, типы, FK drop, use imports, XSS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8 weeks agofix(ERP-292): strict_types в AutoMarkPredictionJob
fomichev [Fri, 17 Apr 2026 14:13:19 +0000 (17:13 +0300)]
fix(ERP-292): strict_types в AutoMarkPredictionJob

8 weeks agofeat(ERP-292): web-контроллер и views авторазметки
fomichev [Fri, 17 Apr 2026 14:04:10 +0000 (17:04 +0300)]
feat(ERP-292): web-контроллер и views авторазметки

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8 weeks agofeat(ERP-292): queue job AutoMarkPredictionJob
fomichev [Fri, 17 Apr 2026 14:04:03 +0000 (17:04 +0300)]
feat(ERP-292): queue job AutoMarkPredictionJob

8 weeks agofeat(ERP-292): консольная команда auto-mark
fomichev [Fri, 17 Apr 2026 14:04:01 +0000 (17:04 +0300)]
feat(ERP-292): консольная команда auto-mark

8 weeks agofix(ERP-292): type cast и null guard в AutoMarkService
fomichev [Fri, 17 Apr 2026 13:55:22 +0000 (16:55 +0300)]
fix(ERP-292): type cast и null guard в AutoMarkService

8 weeks agofeat(ERP-292): AutoMarkService — оркестратор авторазметки
fomichev [Fri, 17 Apr 2026 13:49:41 +0000 (16:49 +0300)]
feat(ERP-292): AutoMarkService — оркестратор авторазметки

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8 weeks agofeat(ERP-292): SimilarityMatcher — TF-IDF cosine similarity
fomichev [Fri, 17 Apr 2026 13:43:38 +0000 (16:43 +0300)]
feat(ERP-292): SimilarityMatcher — TF-IDF cosine similarity

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8 weeks agofeat(ERP-292): RuleBasedParser — словарный парсинг имени товара
fomichev [Fri, 17 Apr 2026 13:37:54 +0000 (16:37 +0300)]
feat(ERP-292): RuleBasedParser — словарный парсинг имени товара

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8 weeks agofeat(ERP-292): модель Products1cAutomarkPrediction и DTO ParseResult
fomichev [Fri, 17 Apr 2026 13:31:16 +0000 (16:31 +0300)]
feat(ERP-292): модель Products1cAutomarkPrediction и DTO ParseResult

8 weeks agofix(ERP-292): CURRENT_TIMESTAMP вместо NOW() в миграции
fomichev [Fri, 17 Apr 2026 13:29:32 +0000 (16:29 +0300)]
fix(ERP-292): CURRENT_TIMESTAMP вместо NOW() в миграции

8 weeks agofeat(ERP-292): миграция таблицы products_1c_automark_predictions
fomichev [Fri, 17 Apr 2026 13:25:56 +0000 (16:25 +0300)]
feat(ERP-292): миграция таблицы products_1c_automark_predictions

8 weeks agochore: add .worktrees/ to .gitignore
fomichev [Fri, 17 Apr 2026 13:08:45 +0000 (16:08 +0300)]
chore: add .worktrees/ to .gitignore

8 weeks agoФикс по фильтры
fomichev [Fri, 17 Apr 2026 10:48:07 +0000 (13:48 +0300)]
Фикс по фильтры

8 weeks agoФикс по фильтры
fomichev [Fri, 17 Apr 2026 09:40:36 +0000 (12:40 +0300)]
Фикс по фильтры

8 weeks agoФикс по js
fomichev [Fri, 17 Apr 2026 09:23:38 +0000 (12:23 +0300)]
Фикс по js

8 weeks agoФикс по маппингу
fomichev [Fri, 17 Apr 2026 07:26:57 +0000 (10:26 +0300)]
Фикс по маппингу

2 months agoКаталог поставщика
Vladimir Fomichev [Tue, 14 Apr 2026 07:32:43 +0000 (10:32 +0300)]
Каталог поставщика

2 months agoКаталог поставщика
Vladimir Fomichev [Tue, 14 Apr 2026 07:32:34 +0000 (10:32 +0300)]
Каталог поставщика

2 months agofeat(ERP-318): справочник поставщиков — Model + Controller + View + JS
Vladimir Fomichev [Thu, 9 Apr 2026 06:39:09 +0000 (09:39 +0300)]
feat(ERP-318): справочник поставщиков — Model + Controller + View + JS

Реализован CRUD справочника поставщиков с модальными окнами (AJAX),
GridView + PJAX и каскадной деактивацией связанных записей.

Компоненты:
- Supplier (AR модель с TimestampBehavior + BlameableBehavior)
- SupplierSearch (search модель без пагинации)
- SupplierController (AJAX CRUD, наследует BaseController)
- views/supplier/index.php (GridView + модалка + JS)
- views/supplier/_form.php (форма для модалки)
- BuyerReferenceController + view (контейнер с табами)

Бейджи типа и статуса — по UI-guideline из spec-supplier-reference.html.
Валидация: name unique varchar(200), lead_time >= 0, type/currency enum.
Soft delete через is_active=false с каскадом на markings и product_mappings.
Write-операции обёрнуты в DB-транзакции.

Артефакты workflow: docs/jira/ERP-318/

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2 months agoMerge branch 'fix_filippov_BC-248_max_chatbot_source' into 'develop'
Aleksey Filippov [Thu, 2 Apr 2026 16:11:58 +0000 (16:11 +0000)]
Merge branch 'fix_filippov_BC-248_max_chatbot_source' into 'develop'

fix(BC-248): защита миграции purchase_date от повторного применения

See merge request gitlab-instance/yii-erp24!1158

2 months agofix(BC-248): защита миграции purchase_date от повторного применения origin/fix_filippov_BC-248_max_chatbot_source
Aleksey Filippov [Thu, 2 Apr 2026 16:11:06 +0000 (19:11 +0300)]
fix(BC-248): защита миграции purchase_date от повторного применения

Проверка наличия колонки через getTableSchema перед ALTER TABLE.

2 months agoMerge branch 'fix_filippov_BC-248_max_chatbot_source' into 'develop'
Aleksey Filippov [Wed, 1 Apr 2026 16:12:06 +0000 (16:12 +0000)]
Merge branch 'fix_filippov_BC-248_max_chatbot_source' into 'develop'

feat(BC-248): добавить поле purchase_date в обращения KikFeedback

See merge request gitlab-instance/yii-erp24!1156

2 months agofeat(BC-248): добавить поле purchase_date в обращения KikFeedback
Aleksey Filippov [Wed, 1 Apr 2026 16:08:35 +0000 (19:08 +0300)]
feat(BC-248): добавить поле purchase_date в обращения KikFeedback

- Миграция: колонка purchase_date (date, nullable) в kik_feedback_request
- Модель KikFeedbackRequest: PHPDoc, rules, attributeLabels
- API2 KikController: приём purchase_date из bodyParams
- API3 KikService + FeedbackInput: приём purchase_date, маппинг max_chatbot
- View: отображение "Дата покупки" в карточке обращения

2 months agoMerge branch 'fix_filippov_BC-248_max_chatbot_source' into 'develop'
Aleksey Filippov [Wed, 1 Apr 2026 14:42:40 +0000 (14:42 +0000)]
Merge branch 'fix_filippov_BC-248_max_chatbot_source' into 'develop'

fix(BC-248): actionGetStores — вернуть UUID из Products1c вместо числового ID из CityStore

See merge request gitlab-instance/yii-erp24!1155

2 months agofix(BC-248): actionGetStores — вернуть UUID из Products1c вместо числового ID из...
Aleksey Filippov [Wed, 1 Apr 2026 14:41:26 +0000 (17:41 +0300)]
fix(BC-248): actionGetStores — вернуть UUID из Products1c вместо числового ID из CityStore

Max-бот ожидает UUID магазинов (Products1c.id), а не числовой ID из CityStore.
Удалён закомментированный дубликат метода.

2 months agoMerge branch 'fix_filippov_BC-248_max_chatbot_source' into 'develop'
Aleksey Filippov [Wed, 1 Apr 2026 13:40:14 +0000 (13:40 +0000)]
Merge branch 'fix_filippov_BC-248_max_chatbot_source' into 'develop'

fix(BC-248): добавить источник max_chatbot в маппинг KikFeedback

See merge request gitlab-instance/yii-erp24!1154

2 months agofix(BC-248): добавить источник max_chatbot в маппинг KikFeedback
Aleksey Filippov [Wed, 1 Apr 2026 13:33:38 +0000 (16:33 +0300)]
fix(BC-248): добавить источник max_chatbot в маппинг KikFeedback

Обратная связь из Max-бота записывалась с source=0 (неизвестный)
вместо source=11 (Макс), т.к. маппинг не содержал max_chatbot.

2 months agoMerge branch 'feature_filippov_ERP-280_reduce_cleanup_period' into 'develop'
Aleksey Filippov [Wed, 1 Apr 2026 07:44:17 +0000 (07:44 +0000)]
Merge branch 'feature_filippov_ERP-280_reduce_cleanup_period' into 'develop'

feat(ERP-280): клиентская валидация суммарного размера файлов (лимит 2.5 ГБ)

See merge request gitlab-instance/yii-erp24!1153

2 months agofeat(ERP-280): клиентская валидация суммарного размера файлов (лимит 2.5 ГБ) origin/feature_filippov_ERP-280_reduce_cleanup_period
Aleksey Filippov [Wed, 1 Apr 2026 06:39:53 +0000 (09:39 +0300)]
feat(ERP-280): клиентская валидация суммарного размера файлов (лимит 2.5 ГБ)

Предотвращает отправку формы списания, если суммарный размер вложений
превышает 2.5 ГБ. Показывает пользователю фактический и допустимый размер.

2 months agoMerge branch 'feature_filippov_ERP-280_reduce_cleanup_period' into 'develop'
Aleksey Filippov [Tue, 31 Mar 2026 14:54:24 +0000 (14:54 +0000)]
Merge branch 'feature_filippov_ERP-280_reduce_cleanup_period' into 'develop'

fix(ERP-280): сократить срок подготовки файлов списания до 5 дней

See merge request gitlab-instance/yii-erp24!1152

2 months agofix(ERP-280): сократить срок подготовки файлов списания до 5 дней
Aleksey Filippov [Tue, 31 Mar 2026 14:53:26 +0000 (17:53 +0300)]
fix(ERP-280): сократить срок подготовки файлов списания до 5 дней

Было: -1 month, стало: -5 days в export-old, print-old и связанных методах модели.

2 months agoMerge branch 'fix_filippov_batch_sync_pdo_binding' into 'develop'
Aleksey Filippov [Tue, 24 Mar 2026 17:04:00 +0000 (17:04 +0000)]
Merge branch 'fix_filippov_batch_sync_pdo_binding' into 'develop'

fix: BatchSyncService PDO binding — $N плейсхолдеры → :pN

See merge request gitlab-instance/yii-erp24!1150

2 months agofix: BatchSyncService PDO binding — $N плейсхолдеры → :pN origin/fix_filippov_batch_sync_pdo_binding
Aleksey Filippov [Tue, 24 Mar 2026 16:46:06 +0000 (19:46 +0300)]
fix: BatchSyncService PDO binding — $N плейсхолдеры → :pN

PDO::bindValue() требует индекс ≥ 1, а $params был 0-индексированным
массивом с PostgreSQL-нативными $1,$2,$3 плейсхолдерами. Это вызывало:

  PDOStatement::bindValue(): Argument #1 ($param) must be >= 1

Результат на проде: Balances::deleteAll() удалял данные магазина,
BatchSyncService->upsertBalances() падал → магазин терял ВСЕ строки.

Fix: именованные :p1,:p2,:p3 плейсхолдеры вместо $1,$2,$3.
Проверено на реальной БД: 5 магазинов (419-499 товаров) + characteristics.

2 months agoMerge branch 'feature_filippov_ERP-33_stock_state_scd2' into 'develop'
Aleksey Filippov [Tue, 24 Mar 2026 14:19:31 +0000 (14:19 +0000)]
Merge branch 'feature_filippov_ERP-33_stock_state_scd2' into 'develop'

Feature filippov erp 33 stock state scd2

See merge request gitlab-instance/yii-erp24!1149

2 months agofix(ERP-33): SendTelegramMessageJob namespace app\jobs, не yii_app\jobs origin/feature_filippov_ERP-33_stock_state_scd2
Aleksey Filippov [Tue, 24 Mar 2026 14:16:52 +0000 (17:16 +0300)]
fix(ERP-33): SendTelegramMessageJob namespace app\jobs, не yii_app\jobs

2 months agoMerge branch 'task-JIRA-ERP-33-20260324070448' into 'develop'
Aleksey Filippov [Tue, 24 Mar 2026 13:59:46 +0000 (13:59 +0000)]
Merge branch 'task-JIRA-ERP-33-20260324070448' into 'develop'

Task jira erp 33 20260324070448

See merge request gitlab-instance/yii-erp24!1148

2 months agoMerge branch 'develop' into 'task-JIRA-ERP-33-20260324070448'
Aleksey Filippov [Tue, 24 Mar 2026 13:59:15 +0000 (13:59 +0000)]
Merge branch 'develop' into 'task-JIRA-ERP-33-20260324070448'

# Conflicts:
#   erp24/services/StockStateService.php

2 months agofix(ERP-33): safe cast components — пустые строки и NULL в products_1c
Aleksey Filippov [Tue, 24 Mar 2026 13:41:41 +0000 (16:41 +0300)]
fix(ERP-33): safe cast components — пустые строки и NULL в products_1c

2 months agofix(ERP-33): safe cast components — пустые строки и NULL в products_1c
Aleksey Filippov [Tue, 24 Mar 2026 13:41:41 +0000 (16:41 +0300)]
fix(ERP-33): safe cast components — пустые строки и NULL в products_1c

2 months agoMerge branch 'feature_filippov_ERP-33_stock_state_scd2' into 'develop'
Aleksey Filippov [Tue, 24 Mar 2026 13:39:32 +0000 (13:39 +0000)]
Merge branch 'feature_filippov_ERP-33_stock_state_scd2' into 'develop'

[ERP-33]: cast components::jsonb + TelegramTarget multiline fix

See merge request gitlab-instance/yii-erp24!1147

2 months agofix(ERP-33): cast components::jsonb + TelegramTarget multiline fix
Aleksey Filippov [Tue, 24 Mar 2026 13:36:36 +0000 (16:36 +0300)]
fix(ERP-33): cast components::jsonb + TelegramTarget multiline fix

1. StockStateService: pp.components::jsonb cast — products_1c хранит
   components как text, stock_state ожидает JSONB
2. TelegramTarget: экранировать \n при записи в error_tracking.log —
   многострочные ошибки ломали формат файла и спамили stderr

2 months agofix(ERP-33): cast pp.components::jsonb в INSERT для совместимости с products_1c
Aleksey Filippov [Tue, 24 Mar 2026 13:26:39 +0000 (16:26 +0300)]
fix(ERP-33): cast pp.components::jsonb в INSERT для совместимости с products_1c

2 months agoMerge branch 'task-JIRA-ERP-33-20260324070448' into 'develop'
Aleksey Filippov [Tue, 24 Mar 2026 13:15:10 +0000 (13:15 +0000)]
Merge branch 'task-JIRA-ERP-33-20260324070448' into 'develop'

fix(ERP-33): TelegramTarget — экранировать \n в error_tracking.log

See merge request gitlab-instance/yii-erp24!1146

2 months agorefactor(ERP-33): убрать actionCleanup — очистка не нужна
Aleksey Filippov [Tue, 24 Mar 2026 11:57:09 +0000 (14:57 +0300)]
refactor(ERP-33): убрать actionCleanup — очистка не нужна

2 months agofix(ERP-33): TelegramTarget — экранировать \n в error_tracking.log
Aleksey Filippov [Tue, 24 Mar 2026 11:49:26 +0000 (14:49 +0300)]
fix(ERP-33): TelegramTarget — экранировать \n в error_tracking.log

Многострочные ошибки (содержащие $_SERVER dump) ломали формат
файла error_tracking.log: file() разбивала одну запись на
множество строк, каждая выводилась как "Некорректная строка".

Фикс: str_replace \n → \\n при записи, убран error_log спам.

2 months agoMerge branch 'task-JIRA-ERP-33-20260324070448' into 'develop'
Aleksey Filippov [Tue, 24 Mar 2026 11:42:53 +0000 (11:42 +0000)]
Merge branch 'task-JIRA-ERP-33-20260324070448' into 'develop'

fix(ERP-33): namespace app\ → yii_app\ для совместимости с продом

See merge request gitlab-instance/yii-erp24!1145

2 months agofix(ERP-33): namespace app\ → yii_app\ для совместимости с продом
Aleksey Filippov [Tue, 24 Mar 2026 11:38:04 +0000 (14:38 +0300)]
fix(ERP-33): namespace app\ → yii_app\ для совместимости с продом

2 months agoMerge branch 'task-JIRA-ERP-33-20260324070448' into 'develop'
Aleksey Filippov [Tue, 24 Mar 2026 10:01:19 +0000 (10:01 +0000)]
Merge branch 'task-JIRA-ERP-33-20260324070448' into 'develop'

[ERP-33]: add unit tests for StockHistoryService (11 tests)

See merge request gitlab-instance/yii-erp24!1144

2 months agofeat(ERP-33): заменить StockHistory (snapshot) на StockState (SCD-2)
Aleksey Filippov [Tue, 24 Mar 2026 09:48:40 +0000 (12:48 +0300)]
feat(ERP-33): заменить StockHistory (snapshot) на StockState (SCD-2)

Полная переделка подхода хранения остатков:
- StockHistory (полные снимки 11400 INSERT/запуск) → StockState (SCD-2, 2 SQL)
- Без партиций — одна таблица с valid_from/valid_to (TIMESTAMP)
- valid_to = '2100-01-01 00:00:00' для активных, закрытие на секунду раньше
- is_active boolean для быстрой фильтрации
- batch_ts — единый timestamp пакета на запуск
- Экономия ~78% объёма (660 MB vs 3 GB за 2 года)
- 10 unit-тестов, 29 assertions

2 months agofeat(task-JIRA-ERP-33-20260324070448): Сбор данных по остаткам на день
Auto-Claude Orchestrator [Tue, 24 Mar 2026 08:04:06 +0000 (08:04 +0000)]
feat(task-JIRA-ERP-33-20260324070448): Сбор данных по остаткам на день

2 months agofeat(task-JIRA-ERP-33-20260324070448): Сбор данных по остаткам на день
Auto-Claude Orchestrator [Tue, 24 Mar 2026 08:02:44 +0000 (08:02 +0000)]
feat(task-JIRA-ERP-33-20260324070448): Сбор данных по остаткам на день

2 months agofeat(task-JIRA-ERP-33-20260324070448): Сбор данных по остаткам на день
Auto-Claude Orchestrator [Tue, 24 Mar 2026 08:00:24 +0000 (08:00 +0000)]
feat(task-JIRA-ERP-33-20260324070448): Сбор данных по остаткам на день