]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/log
erp24_rep/yii-erp24/.git
2 weeks agofix(ERP-248): add partner_warehouse_id field to marketplace-store form origin/feature_filippov_ERP-248_fix_subsidy_fallback
Aleksey Filippov [Sat, 28 Feb 2026 21:20:37 +0000 (00:20 +0300)]
fix(ERP-248): add partner_warehouse_id field to marketplace-store form

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-248): use marketplace_store.partner_warehouse_id as fallback for DBS orders
Aleksey Filippov [Sat, 28 Feb 2026 21:15:10 +0000 (00:15 +0300)]
fix(ERP-248): use marketplace_store.partner_warehouse_id as fallback for DBS orders

Add partner_warehouse_id column to marketplace_store table for storing
the physical YM warehouse ID (e.g. 206008) separate from warehouse_guid
(campaign ID 142743530). Use it as fallback when getPartnerWarehouseId()
returns null for DBS orders instead of the incorrect warehouse_guid.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-248): fallback subsidy from subsidies[] when getSubsidy() returns null
Aleksey Filippov [Sat, 28 Feb 2026 20:52:41 +0000 (23:52 +0300)]
fix(ERP-248): fallback subsidy from subsidies[] when getSubsidy() returns null

YandexMarket deprecated the item-level `subsidy` field and stopped sending
it for some order types (DBS). Instead, subsidy is now in `subsidies[]`.

When getSubsidy() returns null:
- sum amounts from getSubsidies() array
- log Yii::warning with calculated value

When getPartnerWarehouseId() returns null:
- fall back to marketplace_order.warehouse_guid (valid for DBS orders)
- only Yii::error if warehouse_guid is also null

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_fix_write_offs_erp_delete_video_csrf' into 'develop'
Aleksey Filippov [Sat, 28 Feb 2026 20:35:55 +0000 (20:35 +0000)]
Merge branch 'feature_filippov_fix_write_offs_erp_delete_video_csrf' into 'develop'

fix: add _csrf token to delete-video AJAX in write_offs_erp form

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

2 weeks agofix: add _csrf token to delete-video AJAX in write_offs_erp form origin/feature_filippov_fix_write_offs_erp_delete_video_csrf
Aleksey Filippov [Sat, 28 Feb 2026 20:34:13 +0000 (23:34 +0300)]
fix: add _csrf token to delete-video AJAX in write_offs_erp form

POST request to write-offs-erp/delete-video was missing _csrf token,
causing 400 BadRequestHttpException on every video removal.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-247_add_delivery_logging' into 'develop'
Aleksey Filippov [Sat, 28 Feb 2026 20:02:05 +0000 (20:02 +0000)]
Merge branch 'feature_filippov_ERP-247_add_delivery_logging' into 'develop'

fix(ERP-247): remove debug Yii::error срок доставки logs from MarketplaceService

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

2 weeks agofix(ERP-247): skip item save on null subsidy/partner_warehouse_id, log Yii::error origin/feature_filippov_ERP-247_add_delivery_logging
Aleksey Filippov [Sat, 28 Feb 2026 19:56:56 +0000 (22:56 +0300)]
fix(ERP-247): skip item save on null subsidy/partner_warehouse_id, log Yii::error

When getSubsidy() or getPartnerWarehouseId() returns null — log error with
orderId + shopSku and skip saving the item (continue) instead of writing
invalid fallback values (0 / 'N/A') to DB.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-247): change срок доставки log level from info to warning for Loki visibility
Aleksey Filippov [Sat, 28 Feb 2026 19:44:02 +0000 (22:44 +0300)]
fix(ERP-247): change срок доставки log level from info to warning for Loki visibility

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-247): add warning logs for null subsidy/partner_warehouse_id, restore deliver...
Aleksey Filippov [Sat, 28 Feb 2026 19:35:06 +0000 (22:35 +0300)]
fix(ERP-247): add warning logs for null subsidy/partner_warehouse_id, restore delivery info as Yii::info

- Extract getSubsidy() and getPartnerWarehouseId() to local vars in all 6 item-saving blocks
- Log Yii::warning with orderId + shopSku when either returns null
- Restore срок доставки shipments loop (was removed as debug, actually informational)
- Change level from Yii::error to Yii::info for shipment delivery time logging

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-247): remove debug Yii::error срок доставки logs from MarketplaceService
Aleksey Filippov [Sat, 28 Feb 2026 19:15:29 +0000 (22:15 +0300)]
fix(ERP-247): remove debug Yii::error срок доставки logs from MarketplaceService

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-247_add_delivery_logging' into 'develop'
Aleksey Filippov [Sat, 28 Feb 2026 19:08:16 +0000 (19:08 +0000)]
Merge branch 'feature_filippov_ERP-247_add_delivery_logging' into 'develop'

fix(ERP-247): improve delivery save error logging in MarketplaceService

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

2 weeks agofix(ERP-247): improve delivery save error logging in MarketplaceService
Aleksey Filippov [Sat, 28 Feb 2026 18:57:39 +0000 (21:57 +0300)]
fix(ERP-247): improve delivery save error logging in MarketplaceService

- Log deliveryText when type not recognized (was silent return false)
- Log delivery model errors + deliveryText when model.save() fails
  (previously logged wrong model's errors - marketplaceOrder instead)
- Fix callers to log order id instead of empty marketplaceOrder.getErrors()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_fix_write_offs_erp_csrf' into 'develop'
Aleksey Filippov [Sat, 28 Feb 2026 18:08:21 +0000 (18:08 +0000)]
Merge branch 'feature_filippov_fix_write_offs_erp_csrf' into 'develop'

fix(ERP-247): add CSRF token to AJAX calls in WriteOffsErp view

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

2 weeks agofix(ERP-247): add CSRF token to AJAX calls in WriteOffsErp view origin/feature_filippov_fix_write_offs_erp_csrf
Aleksey Filippov [Sat, 28 Feb 2026 17:23:29 +0000 (20:23 +0300)]
fix(ERP-247): add CSRF token to AJAX calls in WriteOffsErp view

$.ajax() calls for confirm-write-off and re-send-write-off were posting
without _csrf token, causing BadRequestHttpException 400 on every request.
Added yii.getCsrfToken() to data payload of both calls.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'chore/update-claude-skills' into 'develop'
Aleksey Filippov [Sat, 28 Feb 2026 15:56:53 +0000 (15:56 +0000)]
Merge branch 'chore/update-claude-skills' into 'develop'

chore: update .claude/skills — refactor to <500 lines + references/assets

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

2 weeks agochore: update .claude/skills — refactor to <500 lines + references/assets origin/chore/update-claude-skills
Aleksey Filippov [Sat, 28 Feb 2026 15:52:59 +0000 (18:52 +0300)]
chore: update .claude/skills — refactor to <500 lines + references/assets

- Extracted detailed content from 21 skills into references/ and assets/
- Each SKILL.md now acts as a hub (<500 lines) with JiT-loaded references
- Added new skills: code-review-expert
- Added references/ dirs for: jira-*, github-*, swarm-*, sparc-*, pair-programming, etc.
- Added assets/ dirs for: agentdb-optimization, flow-nexus-platform, github-*, etc.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-246_fix_api1_site_view' into 'develop'
Aleksey Filippov [Sat, 28 Feb 2026 15:25:14 +0000 (15:25 +0000)]
Merge branch 'feature_filippov_ERP-246_fix_api1_site_view' into 'develop'

fix(ERP-246): add missing api1/views/site/index.php to fix ViewNotFoundException

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

2 weeks agofix(ERP-246): replace hardcoded OUT_DIR with relative path in UploadService origin/feature_filippov_ERP-246_fix_api1_site_view
Aleksey Filippov [Sat, 28 Feb 2026 12:02:39 +0000 (15:02 +0300)]
fix(ERP-246): replace hardcoded OUT_DIR with relative path in UploadService

Hardcoded path /var/www/erp24/api2/json caused Permission denied errors
on production when log files were owned by non-www-data users.
Using __DIR__ . '/../api2/json' makes the path deployment-agnostic.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-246): add missing api1/views/site/index.php to fix ViewNotFoundException
Aleksey Filippov [Sat, 28 Feb 2026 12:01:27 +0000 (15:01 +0300)]
fix(ERP-246): add missing api1/views/site/index.php to fix ViewNotFoundException

api1 and main app share namespace app\controllers, so SiteController
from the main app is accessible via api1. When GET / hits api1, Yii2
routes to SiteController::actionIndex() which calls render('index'),
but api1/views/site/index.php did not exist → ViewNotFoundException (500).

Added empty view file to stop the error. api1 is a REST API (FORMAT_JSON)
so the rendered empty string is JSON-encoded as "".

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-245_fix_domru_cams_type_error' into 'develop'
Aleksey Filippov [Sat, 28 Feb 2026 10:42:41 +0000 (10:42 +0000)]
Merge branch 'feature_filippov_ERP-245_fix_domru_cams_type_error' into 'develop'

[ERP-245]: separate broken-file marker from image src URL

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

2 weeks agofix(ERP-245): separate broken-file marker from image src URL origin/feature_filippov_ERP-245_fix_domru_cams_type_error
Aleksey Filippov [Sat, 28 Feb 2026 08:17:53 +0000 (11:17 +0300)]
fix(ERP-245): separate broken-file marker from image src URL

- WriteOffsErp::getImagesList() previously set $imageThumbRow='broken_file-error'
  as sentinel, then built src="/broken_file-error" causing Yii2 to try routing
  it as a controller action → repeated 404 errors in production logs
- Separated marker (kept in $relaFileName for alt/debug) from URL (now points
  to valid static placeholder /images/no-image.svg)
- Added erp24/web/images/no-image.svg: lightweight SVG fallback served by nginx

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-245_fix_domru_cams_type_error' into 'develop'
Aleksey Filippov [Fri, 27 Feb 2026 22:09:33 +0000 (22:09 +0000)]
Merge branch 'feature_filippov_ERP-245_fix_domru_cams_type_error' into 'develop'

fix(ERP-245): add is_array check to second foreach in domru-cams

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

2 weeks agofix(ERP-245): add is_array check to second foreach in domru-cams
Aleksey Filippov [Fri, 27 Feb 2026 22:06:19 +0000 (01:06 +0300)]
fix(ERP-245): add is_array check to second foreach in domru-cams

Same TypeError fix for the second foreach loop that inserts data
into store_visitors table.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-245_fix_domru_cams_type_error' into 'develop'
Aleksey Filippov [Fri, 27 Feb 2026 21:42:36 +0000 (21:42 +0000)]
Merge branch 'feature_filippov_ERP-245_fix_domru_cams_type_error' into 'develop'

[ERP-245]: prevent TypeError when Domru XML has single count element

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

2 weeks agofix(ERP-245): prevent TypeError when Domru XML has single count element
Aleksey Filippov [Fri, 27 Feb 2026 21:38:15 +0000 (00:38 +0300)]
fix(ERP-245): prevent TypeError when Domru XML has single count element

When XML response contains only one count element, json_decode(json_encode($xml))
produces a flat array instead of nested, causing $arr to be a string.
Skip non-array entries to avoid "Cannot access offset of type string on string".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-244_fix_shift_reminder_csrf' into 'develop'
Aleksey Filippov [Fri, 27 Feb 2026 17:28:13 +0000 (17:28 +0000)]
Merge branch 'feature_filippov_ERP-244_fix_shift_reminder_csrf' into 'develop'

[ERP-244]: fix CSRF validation error in ShiftReminderController

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

2 weeks agofix(ERP-244): fix CSRF validation error in ShiftReminderController origin/feature_filippov_ERP-244_fix_shift_reminder_csrf
Aleksey Filippov [Fri, 27 Feb 2026 15:06:41 +0000 (18:06 +0300)]
fix(ERP-244): fix CSRF validation error in ShiftReminderController

- Disable CSRF validation on ShiftReminderController: endpoint is
  protected by session authentication (AccessControl, roles=['@']).
  CSRF cookies may be absent in browsers with strict privacy settings,
  causing false 400 errors for legitimate authenticated users.
- Stop retrying on 400/401/403 responses in shift-reminder.js to prevent
  cascading error floods in logs when auth/validation fails.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-242_fix_domru_xml_validation' into 'develop'
Aleksey Filippov [Thu, 26 Feb 2026 20:17:01 +0000 (20:17 +0000)]
Merge branch 'feature_filippov_ERP-242_fix_domru_xml_validation' into 'develop'

fix(ERP-242): validate XML response from Domru API before parsing

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

2 weeks agoMerge branch 'feature_filippov_ERP-243_fix_timetable_transaction' into 'develop'
Aleksey Filippov [Thu, 26 Feb 2026 20:04:33 +0000 (20:04 +0000)]
Merge branch 'feature_filippov_ERP-243_fix_timetable_transaction' into 'develop'

fix(ERP-243): catch all exceptions in TimetableService transaction rollback

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

2 weeks agofix(ERP-243): catch all exceptions in TimetableService transaction rollback origin/feature_filippov_ERP-243_fix_timetable_transaction
Aleksey Filippov [Thu, 26 Feb 2026 19:58:14 +0000 (22:58 +0300)]
fix(ERP-243): catch all exceptions in TimetableService transaction rollback

catch (Exception) only caught yii\db\Exception, missing
InvalidArgumentException from validation/upload errors. This left
orphaned timetable records with tabel=1 but no timetable_fact entry,
blocking shift reopening.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-242): validate XML response from Domru API before parsing origin/feature_filippov_ERP-242_fix_domru_xml_validation
Aleksey Filippov [Thu, 26 Feb 2026 18:19:45 +0000 (21:19 +0300)]
fix(ERP-242): validate XML response from Domru API before parsing

- Skip iteration on empty curl response instead of writing empty file
- Use libxml_use_internal_errors to catch invalid XML gracefully
- Auto-create log/text/ directory if missing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_2026-02-26_fix_bubble_png_path' into 'develop'
Aleksey Filippov [Thu, 26 Feb 2026 16:45:28 +0000 (16:45 +0000)]
Merge branch 'feature_filippov_2026-02-26_fix_bubble_png_path' into 'develop'

fix: correct bubble.png path in minified CSS

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

2 weeks agofix: correct bubble.png path in minified CSS origin/feature_filippov_2026-02-26_fix_bubble_png_path
Aleksey Filippov [Thu, 26 Feb 2026 16:43:48 +0000 (19:43 +0300)]
fix: correct bubble.png path in minified CSS

Minified CSS in web/min/ referenced ../images/png/bubble.png which
resolved to a non-existent web/images/png/ directory, causing 404.
Fixed to ../azea/assets/images/png/bubble.png where the file actually exists.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-241_fix_api3_timetable_exception' into 'develop'
Aleksey Filippov [Thu, 26 Feb 2026 15:54:02 +0000 (15:54 +0000)]
Merge branch 'feature_filippov_ERP-241_fix_api3_timetable_exception' into 'develop'

fix(ERP-241): use InvalidArgumentException in TimetableService for proper error display

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

2 weeks agofix(ERP-241): use InvalidArgumentException in TimetableService for proper error display origin/feature_filippov_ERP-241_fix_api3_timetable_exception
Aleksey Filippov [Thu, 26 Feb 2026 15:47:41 +0000 (18:47 +0300)]
fix(ERP-241): use InvalidArgumentException in TimetableService for proper error display

TimetableService threw generic \Exception which EventBehavior couldn't
handle, causing "Произошла неизвестная ошибка" in mobile app instead of
actual validation messages. Changed to InvalidArgumentException (matching
pattern used by all other api3 services) and switched from Json::encode
to firstErrors[0] for human-readable messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-240_remove_large_files' into 'develop'
Aleksey Filippov [Wed, 25 Feb 2026 13:40:22 +0000 (13:40 +0000)]
Merge branch 'feature_filippov_ERP-240_remove_large_files' into 'develop'

chore(ERP-240): remove large log and csv files from repository

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

2 weeks agochore(ERP-240): remove large log and csv files from repository origin/feature_filippov_ERP-240_remove_large_files
Aleksey Filippov [Wed, 25 Feb 2026 13:18:47 +0000 (16:18 +0300)]
chore(ERP-240): remove large log and csv files from repository

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-236_add_video_player' into 'develop'
Aleksey Filippov [Wed, 25 Feb 2026 12:51:42 +0000 (12:51 +0000)]
Merge branch 'feature_filippov_ERP-236_add_video_player' into 'develop'

feat(ERP-236): refine ConvertVideoController — entity filter, min-age window, proc_open fix

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

2 weeks agofeat(ERP-236): refine ConvertVideoController — entity filter, min-age window, proc_op... feature_filippov_ERP-236_add_video_player origin/feature_filippov_ERP-236_add_video_player
Aleksey Filippov [Wed, 25 Feb 2026 11:23:38 +0000 (14:23 +0300)]
feat(ERP-236): refine ConvertVideoController — entity filter, min-age window, proc_open fix

- Filter by entity=write_offs_products_erp_video (only write-off videos, not all files)
- Add --min-age=2h param: skip files younger than 2h (queue still processing)
- Reduce default --days from 10 to 2 (cron safety net for queue failures)
- Fix PHP hanging: switch from exec/system to proc_open with /dev/null pipes
- Fix timeout: raise from 600s to 1800s for large files
- Update actionStatus: show write-off video stats only (MOV+AVI / MP4)
- Update WriteOffsErp: change border date from -2 month to -1 month
- Add WriteOffsAttachmentsController: sync border_date comment
- Add erp24/docs/diagrams/convert-video-controller.html

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-236_add_video_player' into 'develop'
Aleksey Filippov [Tue, 24 Feb 2026 21:51:08 +0000 (21:51 +0000)]
Merge branch 'feature_filippov_ERP-236_add_video_player' into 'develop'

Изменение формирования списка файлов на удаление до одного месяца. Старше...

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

2 weeks agoИзменение формирования списка файлов на удаление до одного месяца. Старше одного...
Aleksey Filippov [Tue, 24 Feb 2026 21:50:37 +0000 (00:50 +0300)]
Изменение формирования списка файлов на удаление до одного месяца. Старше одного месяца файлы удаляются.

2 weeks agoMerge branch 'feature_filippov_ERP-236_add_video_player' into 'develop'
Aleksey Filippov [Tue, 24 Feb 2026 20:27:09 +0000 (20:27 +0000)]
Merge branch 'feature_filippov_ERP-236_add_video_player' into 'develop'

auto-claude: subtask-1-1 - Создать FileServiceVideoTest.php с тестами для convertToMp4()

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

2 weeks agoИзменение формирования списка файлов на удаление до одного месяца. Старше одного...
Aleksey Filippov [Tue, 24 Feb 2026 19:12:23 +0000 (22:12 +0300)]
Изменение формирования списка файлов на удаление до одного месяца. Старше одного месяца файлы удаляются.

2 weeks agofix(ERP-236): fix basePath — use @app instead of @app/web for uploads
Aleksey Filippov [Tue, 24 Feb 2026 15:36:32 +0000 (18:36 +0300)]
fix(ERP-236): fix basePath — use @app instead of @app/web for uploads

Files are stored in erp24/uploads/, not erp24/web/uploads/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-236): reduce default conversion interval to 10 days
Aleksey Filippov [Tue, 24 Feb 2026 15:29:08 +0000 (18:29 +0300)]
fix(ERP-236): reduce default conversion interval to 10 days

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-236): filter video conversion to files younger than 30 days
Aleksey Filippov [Tue, 24 Feb 2026 14:24:56 +0000 (17:24 +0300)]
fix(ERP-236): filter video conversion to files younger than 30 days

Files older than 1 month are cleaned by write-offs-attachments anyway.
Added --days option (default 30, 0=all).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agofeat(ERP-236): add console command for batch MOV→MP4 conversion
Aleksey Filippov [Tue, 24 Feb 2026 14:09:59 +0000 (17:09 +0300)]
feat(ERP-236): add console command for batch MOV→MP4 conversion

php yii convert-video/status   — show stats
php yii convert-video/run      — convert all
php yii convert-video/run --limit=50 --dry-run — preview

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agostyle: widen video player column to 400px in write-offs view
Aleksey Filippov [Tue, 24 Feb 2026 10:51:18 +0000 (13:51 +0300)]
style: widen video player column to 400px in write-offs view

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agofix: review fixes — security, async conversion, CDN→local, tests rewrite
Aleksey Filippov [Tue, 24 Feb 2026 08:50:39 +0000 (11:50 +0300)]
fix: review fixes — security, async conversion, CDN→local, tests rewrite

Code review (39 findings) fixes:

CRITICAL:
- CDN Plyr.js → local /js/plyr.min.js, /css/plyr.min.css
- Sync exec('ffmpeg') → async ConvertVideoToMp4Job (RabbitMQ)
- 2>/dev/null → 2>&1 + error logging in FFmpeg commands
- Add ALLOWED_UPLOAD_EXTENSIONS whitelist (block .php, .sh, .exe)
- Rewrite tests: regex→real method calls (AAA pattern)

HIGH:
- IDOR fix in actionDeleteVideo (getAllowedStoreId check)
- Add delete-video to VerbFilter (POST only)
- Case-insensitive switch: switch($extension) via strtolower()
- File size limit (200MB) and disk space check in job
- Inline styles → CSS classes in write-offs-erp.css
- XSS: validate URL scheme (only relative paths)

MEDIUM:
- FFmpeg timeout 300s wrapper
- Plyr fallback: if (typeof Plyr === 'undefined') return
- Emoji → glyphicon in AVI download card

New files:
- erp24/jobs/ConvertVideoToMp4Job.php
- erp24/tests/unit/jobs/ConvertVideoToMp4JobTest.php
- erp24/tests/unit/controllers/WriteOffsErpControllerSecurityTest.php
- erp24/docs/plans/002-write-offs-erp-video-v2.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_20260224_docker_config_edit' into 'develop' develop
Aleksey Filippov [Tue, 24 Feb 2026 08:04:53 +0000 (08:04 +0000)]
Merge branch 'feature_filippov_20260224_docker_config_edit' into 'develop'

docker config edit

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

2 weeks agodocker config edit origin/feature_filippov_20260224_docker_config_edit
Aleksey Filippov [Tue, 24 Feb 2026 08:04:26 +0000 (11:04 +0300)]
docker config edit

2 weeks agoMerge branch 'feature_filippov_ERP-238_fix_image_save' into 'develop'
Aleksey Filippov [Tue, 24 Feb 2026 07:35:57 +0000 (07:35 +0000)]
Merge branch 'feature_filippov_ERP-238_fix_image_save' into 'develop'

[ERP-238] Ошибка сохранения списание при добавлении 13 -го товара с фото

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

2 weeks ago[ERP-238] Ошибка сохранения списание при добавлении 13 -го товара с фото origin/feature_filippov_ERP-238_fix_image_save
Aleksey Filippov [Tue, 24 Feb 2026 07:32:42 +0000 (10:32 +0300)]
[ERP-238] Ошибка сохранения списание при добавлении 13 -го товара с фото

2 weeks agoMerge branch 'feature_fomichev_erp-234_email_flowwow_processing_update' into 'develop'
Aleksey Filippov [Tue, 24 Feb 2026 07:17:50 +0000 (07:17 +0000)]
Merge branch 'feature_fomichev_erp-234_email_flowwow_processing_update' into 'develop'

[ERP-234] Улучшение обработки писем

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

3 weeks agoMerge branch 'feature_filippov_BR-132_promocode_format' into 'develop'
Aleksey Filippov [Fri, 20 Feb 2026 14:29:15 +0000 (14:29 +0000)]
Merge branch 'feature_filippov_BR-132_promocode_format' into 'develop'

fix(BR-132): make second group digits-only in alphanumeric format

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

3 weeks agofix(BR-132): both groups digits-only in PROMO-XXXX-XXXX format feature_filippov_BR-132_promocode_format origin/feature_filippov_BR-132_promocode_format
Aleksey Filippov [Fri, 20 Feb 2026 14:20:50 +0000 (17:20 +0300)]
fix(BR-132): both groups digits-only in PROMO-XXXX-XXXX format

Format is now PROMO-0123-4567 (two 4-digit groups).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3 weeks agofix(BR-132): make second group digits-only in alphanumeric format
Aleksey Filippov [Fri, 20 Feb 2026 14:18:10 +0000 (17:18 +0300)]
fix(BR-132): make second group digits-only in alphanumeric format

Format is now PROMO-XXXX-1234 (first group alphanumeric, second digits).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3 weeks agoMerge branch 'feature_filippov_BR-132_promocode_format' into 'develop'
Aleksey Filippov [Fri, 20 Feb 2026 13:57:30 +0000 (13:57 +0000)]
Merge branch 'feature_filippov_BR-132_promocode_format' into 'develop'

feat(BR-132): add alphanumeric promo code format PROMO-XXXX-XXXX

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

3 weeks agofeat(BR-132): add is_promo_balance flag to promocode
Aleksey Filippov [Fri, 20 Feb 2026 13:47:30 +0000 (16:47 +0300)]
feat(BR-132): add is_promo_balance flag to promocode

Boolean field to distinguish promo codes that credit separate promo
balance vs regular bonuses. Propagated to child codes on generation
and bulk update. UI toggle added to edit form.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3 weeks agofeat(BR-132): add alphanumeric promo code format PROMO-XXXX-XXXX
Aleksey Filippov [Fri, 20 Feb 2026 13:33:10 +0000 (16:33 +0300)]
feat(BR-132): add alphanumeric promo code format PROMO-XXXX-XXXX

Add format switcher for promo code generation: legacy digits (CODE123)
and new alphanumeric (CODE-XXXX-XXXX) without confusing chars (0/O/1/l/I).
Expand code column from VARCHAR(13) to VARCHAR(20).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3 weeks agoauto-claude: subtask-4-3 - Add Plyr JS init and CSS styles via registerCss origin/auto-claude/002-write-offs-erp
Aleksey Filippov [Thu, 19 Feb 2026 16:50:01 +0000 (19:50 +0300)]
auto-claude: subtask-4-3 - Add Plyr JS init and CSS styles via registerCss

- Added registerCss with video-plyr-wrap wrapper styles
- Wrapped video elements in div.video-plyr-wrap for proper Plyr styling
- Plyr initialization already present from previous subtask

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 weeks agoauto-claude: subtask-4-2 - Заменить блок видео на Plyr.js плеер + карточку скачивания
Aleksey Filippov [Thu, 19 Feb 2026 16:48:41 +0000 (19:48 +0300)]
auto-claude: subtask-4-2 - Заменить блок видео на Plyr.js плеер + карточку скачивания

- Добавлен класс write-offs-video для инициализации Plyr.js плеера
- Для AVI файлов создана карточка скачивания с классом video-download-card
- MP4/MOV воспроизводятся через Plyr.js с кастомными контролами
- MOV файлы имеют дополнительную ссылку на скачивание
- Добавлена JS инициализация Plyr плееров при загрузке страницы

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 weeks agoauto-claude: subtask-4-1 - Подключить Plyr.js CSS и JS через registerCssFile/register...
Aleksey Filippov [Thu, 19 Feb 2026 16:47:21 +0000 (19:47 +0300)]
auto-claude: subtask-4-1 - Подключить Plyr.js CSS и JS через registerCssFile/registerJsFile

- Added Plyr.js CSS from CDN (https://cdn.plyr.io/3.7.8/plyr.css)
- Added Plyr.js JS from CDN (https://cdn.plyr.io/3.7.8/plyr.min.js)
- CSS registered with POS_HEAD position for proper styling
- JS registered with POS_END position for optimal page loading

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 weeks agoauto-claude: subtask-3-2 - Скачать plyr.min.css с CDN и сохранить локально
Aleksey Filippov [Thu, 19 Feb 2026 16:45:46 +0000 (19:45 +0300)]
auto-claude: subtask-3-2 - Скачать plyr.min.css с CDN и сохранить локально

Downloaded Plyr v3.7.8 CSS from official CDN (cdn.plyr.io)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 weeks agoauto-claude: subtask-3-1 - Скачать plyr.min.js с CDN и сохранить локально
Aleksey Filippov [Thu, 19 Feb 2026 16:44:14 +0000 (19:44 +0300)]
auto-claude: subtask-3-1 - Скачать plyr.min.js с CDN и сохранить локально

- Downloaded plyr.min.js v3.7.8 from jsdelivr CDN
- File saved to erp24/web/js/plyr.min.js (113KB)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 weeks agoauto-claude: subtask-2-3 - Добавить авто-конвертацию MOV/AVI → MP4 в saveUploadedFile()
Aleksey Filippov [Thu, 19 Feb 2026 16:43:10 +0000 (19:43 +0300)]
auto-claude: subtask-2-3 - Добавить авто-конвертацию MOV/AVI → MP4 в saveUploadedFile()

- Добавлена авто-конвертация MOV/AVI файлов в MP4 после saveAs()
- При успешной конвертации оригинальный файл удаляется
- URL в записи Files обновляется на MP4 версию
- Если FFmpeg недоступен, файл сохраняется в оригинальном формате

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 weeks agoauto-claude: subtask-2-2 - Реализовать метод FileService::convertToMp4()
Aleksey Filippov [Thu, 19 Feb 2026 16:41:23 +0000 (19:41 +0300)]
auto-claude: subtask-2-2 - Реализовать метод FileService::convertToMp4()

Добавлен метод для конвертации видео MOV/AVI в MP4 через FFmpeg:
- Проверка наличия FFmpeg через `which ffmpeg`
- Проверка существования исходного файла
- Использование безопасного escapeshellarg() для shell-команд
- Флаг -y для перезаписи без подтверждения
- Флаг -movflags +faststart для быстрого старта воспроизведения
- Graceful fallback: возвращает null при ошибках без исключений
- Логирование через Yii::warning() с категорией 'video'

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 weeks agoauto-claude: subtask-2-1 - Добавить 'avi' в switch-case определения типа файла
Aleksey Filippov [Thu, 19 Feb 2026 16:39:40 +0000 (19:39 +0300)]
auto-claude: subtask-2-1 - Добавить 'avi' в switch-case определения типа файла

Добавлена поддержка расширения 'avi' в определении типа файла как 'video'
в методе saveUploadedFile() класса FileService.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 weeks agoauto-claude: subtask-1-1 - Создать FileServiceVideoTest.php с тестами для convertToMp4()
Aleksey Filippov [Thu, 19 Feb 2026 16:38:42 +0000 (19:38 +0300)]
auto-claude: subtask-1-1 - Создать FileServiceVideoTest.php с тестами для convertToMp4()

TDD RED phase: тесты написаны ДО реализации метода convertToMp4().

Добавлены тесты:
- testConvertToMp4MethodExists: проверка наличия метода
- testConvertToMp4MethodSignature: проверка сигнатуры метода
- testConvertToMp4ChecksFfmpegAvailability: проверка FFmpeg через which
- testConvertToMp4UsesEscapeshellarg: проверка безопасности shell-команд
- testConvertToMp4UsesFfmpegOverwriteFlag: проверка флага -y
- testConvertToMp4UsesFaststartFlag: проверка movflags +faststart
- testConvertToMp4LogsWhenFfmpegNotInstalled: проверка логирования
- testAviFileTypeIsVideo: проверка типа AVI файлов
- testSaveUploadedFileAutoConvertsMovAvi: проверка авто-конвертации
- testOriginalFileDeletedOnlyAfterSuccessfulConversion: проверка удаления
- testConvertToMp4UsesH264Codec: проверка h264 кодека
- testConvertToMp4UsesAacCodec: проверка aac кодека

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3 weeks agoMerge branch 'feature_filippov_ERP-235_add_MP_filter' into 'develop'
Aleksey Filippov [Thu, 19 Feb 2026 09:35:18 +0000 (09:35 +0000)]
Merge branch 'feature_filippov_ERP-235_add_MP_filter' into 'develop'

Добавил разделение по тысячам для улучшения визуализации.

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

3 weeks agofeat(dashboard): add thousands separator to sales and plan columns origin/feature_filippov_ERP-235_add_MP_filter
Aleksey Filippov [Thu, 19 Feb 2026 09:30:10 +0000 (12:30 +0300)]
feat(dashboard): add thousands separator to sales and plan columns

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3 weeks agoMerge branch 'feature_filippov_ERP-235_add_MP_filter' into 'develop'
Aleksey Filippov [Thu, 19 Feb 2026 09:14:40 +0000 (09:14 +0000)]
Merge branch 'feature_filippov_ERP-235_add_MP_filter' into 'develop'

Добавить фильтр для исключения из продаж розницы чеков по маркетплейсам для...

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

3 weeks agoДобавить фильтр для исключения из продаж розницы чеков по маркетплейсам для дашборда...
Aleksey Filippov [Thu, 19 Feb 2026 09:13:35 +0000 (12:13 +0300)]
Добавить фильтр для исключения из продаж розницы чеков по маркетплейсам для дашборда продаж сегодня.

3 weeks agoошибки при правке магазинов маркетплейса feature_fomichev_erp-234_email_flowwow_processing_update origin/feature_fomichev_erp-234_email_flowwow_processing_update
Vladimir Fomichev [Thu, 19 Feb 2026 08:42:19 +0000 (11:42 +0300)]
ошибки при правке магазинов маркетплейса

3 weeks agoПадение в таймаут
Vladimir Fomichev [Thu, 19 Feb 2026 07:54:39 +0000 (10:54 +0300)]
Падение в таймаут

3 weeks agoЛогика проставления номера заказа из тела письма
Vladimir Fomichev [Thu, 19 Feb 2026 07:43:19 +0000 (10:43 +0300)]
Логика проставления номера заказа из тела письма

3 weeks agoЛогика проставления номера заказа
Vladimir Fomichev [Thu, 19 Feb 2026 07:35:46 +0000 (10:35 +0300)]
Логика проставления номера заказа

3 weeks agoОшибки подключения
Vladimir Fomichev [Wed, 18 Feb 2026 09:06:01 +0000 (12:06 +0300)]
Ошибки подключения

3 weeks agoСортировка писем в интерфейсе
Vladimir Fomichev [Wed, 18 Feb 2026 08:55:41 +0000 (11:55 +0300)]
Сортировка писем в интерфейсе

3 weeks agoИзменяем логику обработки писем от Flowwow
Vladimir Fomichev [Wed, 18 Feb 2026 08:48:12 +0000 (11:48 +0300)]
Изменяем логику обработки писем от Flowwow

3 weeks agoДобавление логирования на загрузку файлов в документ списания. origin/feature_filippov_ERP-233_fix_upload_files_write_offs
Aleksey Filippov [Tue, 17 Feb 2026 12:40:18 +0000 (15:40 +0300)]
Добавление логирования на загрузку файлов в документ списания.

3 weeks agoMerge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'
Aleksey Filippov [Tue, 17 Feb 2026 12:37:51 +0000 (12:37 +0000)]
Merge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'

Добавление логирования на загрузку файлов в документ списания.

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

3 weeks agoДобавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Tue, 17 Feb 2026 12:35:42 +0000 (15:35 +0300)]
Добавление логирования на загрузку файлов в документ списания.

3 weeks agoMerge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'
Aleksey Filippov [Tue, 17 Feb 2026 11:23:07 +0000 (11:23 +0000)]
Merge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'

Добавление логирования на загрузку файлов в документ списания.

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

3 weeks agoДобавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Tue, 17 Feb 2026 11:22:24 +0000 (14:22 +0300)]
Добавление логирования на загрузку файлов в документ списания.

3 weeks agoMerge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'
Aleksey Filippov [Tue, 17 Feb 2026 10:04:20 +0000 (10:04 +0000)]
Merge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'

Добавление логирования на загрузку файлов в документ списания.

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

3 weeks agoДобавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Tue, 17 Feb 2026 10:03:08 +0000 (13:03 +0300)]
Добавление логирования на загрузку файлов в документ списания.

3 weeks agoMerge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'
Aleksey Filippov [Tue, 17 Feb 2026 09:41:03 +0000 (09:41 +0000)]
Merge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'

Добавление логирования на загрузку файлов в документ списания.

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

3 weeks agoДобавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Tue, 17 Feb 2026 09:40:16 +0000 (12:40 +0300)]
Добавление логирования на загрузку файлов в документ списания.

3 weeks agoMerge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'
Aleksey Filippov [Tue, 17 Feb 2026 08:35:47 +0000 (08:35 +0000)]
Merge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'

Добавление логирования на загрузку файлов в документ списания.

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

3 weeks agoДобавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Tue, 17 Feb 2026 08:28:30 +0000 (11:28 +0300)]
Добавление логирования на загрузку файлов в документ списания.

3 weeks agoMerge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'
Aleksey Filippov [Tue, 17 Feb 2026 07:54:06 +0000 (07:54 +0000)]
Merge branch 'feature_filippov_ERP-233_fix_upload_files_write_offs' into 'develop'

Feature filippov erp 233 fix upload files write offs

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

3 weeks agoДобавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Tue, 17 Feb 2026 07:47:02 +0000 (10:47 +0300)]
Добавление логирования на загрузку файлов в документ списания.

3 weeks agoДобавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Tue, 17 Feb 2026 06:58:20 +0000 (09:58 +0300)]
Добавление логирования на загрузку файлов в документ списания.

3 weeks agoДобавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Tue, 17 Feb 2026 06:42:02 +0000 (09:42 +0300)]
Добавление логирования на загрузку файлов в документ списания.

3 weeks agoДобавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Tue, 17 Feb 2026 06:39:01 +0000 (09:39 +0300)]
Добавление логирования на загрузку файлов в документ списания.

4 weeks ago[erp-233] Добавление логирования на загрузку файлов в документ списания.
Aleksey Filippov [Mon, 16 Feb 2026 21:34:45 +0000 (00:34 +0300)]
[erp-233] Добавление логирования на загрузку файлов в документ списания.

4 weeks agoMerge branch 'feature_filippov_ERP-48J_scheduler_fix' into 'develop'
Aleksey Filippov [Mon, 16 Feb 2026 09:10:15 +0000 (09:10 +0000)]
Merge branch 'feature_filippov_ERP-48J_scheduler_fix' into 'develop'

fix использовать claude CLI и временные файлы для промптов

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

4 weeks agoMerge branch 'feature_filippov_20260213_fix_marketplace_imap_check' into 'develop'
Aleksey Filippov [Fri, 13 Feb 2026 20:25:39 +0000 (20:25 +0000)]
Merge branch 'feature_filippov_20260213_fix_marketplace_imap_check' into 'develop'

Добавлена проверка IMAP-ответа в MarketplaceController::actionGetFlowwowOrders

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

4 weeks agoДобавлена проверка IMAP-ответа в MarketplaceController::actionGetFlowwowOrders origin/feature_filippov_20260213_fix_marketplace_imap_check
Aleksey Filippov [Fri, 13 Feb 2026 20:22:58 +0000 (23:22 +0300)]
Добавлена проверка IMAP-ответа в MarketplaceController::actionGetFlowwowOrders

Если IMAP не возвращает массив заказов — логируем ошибку и завершаем команду,
вместо падения на обращении к несуществующим ключам массива.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>