]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/log
erp24_rep/yii-erp24/.git
12 days agofix(timetable): guard admin_checkin query against empty bigint fields origin/feature_filippov_20260304_fix_start_shift_step3_bigint
Aleksey Filippov [Wed, 4 Mar 2026 17:37:33 +0000 (20:37 +0300)]
fix(timetable): guard admin_checkin query against empty bigint fields

Prevent PDO exception when StartForm fields are empty strings — add null
check before querying admin_checkin to avoid PostgreSQL bigint cast error.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
12 days agoMerge branch 'feature_filippov_TO8-48_force_readyto_1c_timeout' into 'develop'
Aleksey Filippov [Wed, 4 Mar 2026 17:32:45 +0000 (17:32 +0000)]
Merge branch 'feature_filippov_TO8-48_force_readyto_1c_timeout' into 'develop'

fix(TO8-48): increase session timeout to 4h, add JS keep-alive ping

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

12 days agofix(TO8-48): increase session timeout to 4h, add JS keep-alive ping origin/feature_filippov_TO8-48_force_readyto_1c_timeout
Aleksey Filippov [Wed, 4 Mar 2026 17:31:25 +0000 (20:31 +0300)]
fix(TO8-48): increase session timeout to 4h, add JS keep-alive ping

Prevent BadRequestHttpException (Unable to verify your data submission)
in WriteOffsErpController caused by PHP session expiry during long form filling.

- erp24/config/web.php: add session component, timeout=14400 (4 hours)
- SiteController: add actionKeepAlive() endpoint for JS ping
- session-keep-alive.js: ping /site/keep-alive every 15 min, pause on hidden tab, skip during upload
- main.php: register session-keep-alive.js globally

12 days agoMerge branch 'feature_filippov_TO8-48_force_readyto_1c_timeout' into 'develop'
Aleksey Filippov [Wed, 4 Mar 2026 08:31:06 +0000 (08:31 +0000)]
Merge branch 'feature_filippov_TO8-48_force_readyto_1c_timeout' into 'develop'

fix(TO8-48): send one summary Telegram message instead of per-order

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

12 days agofix(TO8-48): send one summary Telegram message instead of per-order
Aleksey Filippov [Wed, 4 Mar 2026 08:28:00 +0000 (11:28 +0300)]
fix(TO8-48): send one summary Telegram message instead of per-order

12 days agoMerge branch 'feature_filippov_TO8-48_force_readyto_1c_timeout' into 'develop'
Aleksey Filippov [Wed, 4 Mar 2026 08:07:05 +0000 (08:07 +0000)]
Merge branch 'feature_filippov_TO8-48_force_readyto_1c_timeout' into 'develop'

fix(TO8-48): fix PHPDoc syntax error, */5 closes block comment

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

12 days agofix(TO8-48): fix PHPDoc syntax error, */5 closes block comment
Aleksey Filippov [Wed, 4 Mar 2026 07:59:29 +0000 (10:59 +0300)]
fix(TO8-48): fix PHPDoc syntax error, */5 closes block comment

12 days agoMerge branch 'feature_filippov_TO8-48_force_readyto_1c_timeout' into 'develop'
Aleksey Filippov [Wed, 4 Mar 2026 07:23:49 +0000 (07:23 +0000)]
Merge branch 'feature_filippov_TO8-48_force_readyto_1c_timeout' into 'develop'

fix(TO8-48): fix readyto_1c strict comparison, add cron-based timeout check

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

12 days agofix(TO8-48): fix readyto_1c strict comparison, add cron-based timeout check
Aleksey Filippov [Wed, 4 Mar 2026 07:09:54 +0000 (10:09 +0300)]
fix(TO8-48): fix readyto_1c strict comparison, add cron-based timeout check

- Fix `checkAndSetReadyTo1c()`: cast `readyto_1c` to int before strict
  comparison — PostgreSQL returns string "0", so `!== 0` always skipped
- Add `forceReadyTo1cByTimeout()`: batch-marks orders older than 15 min
  as ready for 1C export, independent of incoming FlowWow emails
- Add console action `marketplace/check-ready-to-1c` for cron (*/5)
- Add unit tests for both string and int readyto_1c values

13 days agoMerge branch 'feature_filippov_20260303_fix_delivery_house_length' into 'develop'
Aleksey Filippov [Tue, 3 Mar 2026 19:43:59 +0000 (19:43 +0000)]
Merge branch 'feature_filippov_20260303_fix_delivery_house_length' into 'develop'

fix: widen delivery text cleanup regex, cap house to 16 chars

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

13 days agofix: widen delivery text cleanup regex, cap house to 16 chars origin/feature_filippov_20260303_fix_delivery_house_length
Aleksey Filippov [Tue, 3 Mar 2026 19:42:33 +0000 (22:42 +0300)]
fix: widen delivery text cleanup regex, cap house to 16 chars

- Change regex from matching only "Уточните адрес доставки" to
  "Уточните \S+ доставки" to catch "время", "дату", etc.
- Add mb_substr guard: house field capped at 16 characters (DB limit)
- Fixes: "house should contain at most 16 characters" validation error

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-252_fix_delivery_street_parsing' into 'develop'
Aleksey Filippov [Mon, 2 Mar 2026 21:03:01 +0000 (21:03 +0000)]
Merge branch 'feature_filippov_ERP-252_fix_delivery_street_parsing' into 'develop'

fix(ERP-252): safe serialization of deliveryText in logs (array to string fix)

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

2 weeks agofix(ERP-252): use district as street fallback, add prod data fixtures origin/feature_filippov_ERP-252_fix_delivery_street_parsing
Aleksey Filippov [Mon, 2 Mar 2026 20:53:47 +0000 (23:53 +0300)]
fix(ERP-252): use district as street fallback, add prod data fixtures

YM API often returns address without street but with district
(e.g., "микрорайон Красногорка"). Now uses district as street fallback.

Added 6 test cases based on real production data:
- #4497: no street, has district (Бор, микрорайон Красногорка)
- #3519: has street (улица Генерала Зимина)
- #4328: district only (микрорайон Щербинки-1)
- #4297: no street, no district (деревня Анкудиновка)
- STRING format with "Уточните время"
- NULL delivery in raw_data

26 tests, 133 assertions — all passing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-252): extract fillDeliveryAddressFallback method, eliminate duplication
Aleksey Filippov [Mon, 2 Mar 2026 20:45:48 +0000 (23:45 +0300)]
fix(ERP-252): extract fillDeliveryAddressFallback method, eliminate duplication

- New method fillDeliveryAddressFallback() handles 3 raw_data formats:
  1) string (FlowWow text) → parseAddressFromDeliveryText()
  2) array with address (YM API JSON) → extract structured fields
  3) null/missing → defaults "Уточняется"
- Replaced 3 inline fallback blocks with single method call
- Fixed surprise-delivery parsing ("Отправим смс получателю...")
- 20 unit tests, 115 assertions — all passing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-252): add delivery parsing tests and fix surprise-delivery pattern
Aleksey Filippov [Mon, 2 Mar 2026 20:30:48 +0000 (23:30 +0300)]
fix(ERP-252): add delivery parsing tests and fix surprise-delivery pattern

12 unit tests for parseAddressFromDeliveryText() covering:
- Full address (city/street/house)
- "Уточните адрес у получателя" pattern
- Surprise SMS delivery ("Отправим смс получателю...")
- Empty strings, prefix-only, unknown cities
- GPS coordinates for known cities
- Pickup delivery, two-word cities
- Result structure validation (all keys, no nulls)

Fixed parser: added filters for surprise-delivery phrases
that were incorrectly parsed as street names.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agofix(ERP-252): safe serialization of deliveryText in logs (array to string fix)
Aleksey Filippov [Mon, 2 Mar 2026 20:25:19 +0000 (23:25 +0300)]
fix(ERP-252): safe serialization of deliveryText in logs (array to string fix)

$rawData['delivery'] can be array (JSON object), not just string.
Use json_encode for non-string values in log messages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-252_fix_delivery_street_parsing' into 'develop'
Aleksey Filippov [Mon, 2 Mar 2026 20:20:33 +0000 (20:20 +0000)]
Merge branch 'feature_filippov_ERP-252_fix_delivery_street_parsing' into 'develop'

fix(ERP-252): fallback when address object exists but street is empty

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

2 weeks agofix(ERP-252): fallback when address object exists but street is empty
Aleksey Filippov [Mon, 2 Mar 2026 20:17:24 +0000 (23:17 +0300)]
fix(ERP-252): fallback when address object exists but street is empty

$delivery->getAddress() returns non-null object with empty street field.
Changed from if/else to unconditional check: if street is still empty
after structured address fill, apply parseAddressFromDeliveryText()
or "Уточняется" defaults. Markers updated to [ERP-252-v3].

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-252_fix_delivery_street_parsing' into 'develop'
Aleksey Filippov [Mon, 2 Mar 2026 20:06:00 +0000 (20:06 +0000)]
Merge branch 'feature_filippov_ERP-252_fix_delivery_street_parsing' into 'develop'

fix(ERP-252): add [ERP-252-v2] markers to verify deployment

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

2 weeks agofix(ERP-252): add unique markers [DELIVERY-SAVE-1/2/3] to each error location
Aleksey Filippov [Mon, 2 Mar 2026 20:02:37 +0000 (23:02 +0300)]
fix(ERP-252): add unique markers [DELIVERY-SAVE-1/2/3] to each error location

2 weeks agofix(ERP-252): add [ERP-252-v2] markers to verify deployment
Aleksey Filippov [Mon, 2 Mar 2026 20:00:05 +0000 (23:00 +0300)]
fix(ERP-252): add [ERP-252-v2] markers to verify deployment

Temporary logging to confirm new code is running on production.
Search for "[ERP-252-v2]" in logs to verify.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-252_fix_delivery_street_parsing' into 'develop'
Aleksey Filippov [Mon, 2 Mar 2026 19:44:38 +0000 (19:44 +0000)]
Merge branch 'feature_filippov_ERP-252_fix_delivery_street_parsing' into 'develop'

fix(ERP-252): parse delivery address from text when API returns no structured address

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

2 weeks agofix(ERP-251): parse delivery address from text when API returns no structured address
Aleksey Filippov [Mon, 2 Mar 2026 19:16:55 +0000 (22:16 +0300)]
fix(ERP-251): parse delivery address from text when API returns no structured address

Some orders (FlowWow) have delivery info as free text in raw_data
instead of structured address fields. When $delivery->getAddress()
returns null, fallback to parseAddressFromDeliveryText() to extract
city/street/house from the text. Applied in all 3 delivery creation
points in processOrders().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-251_fix_delivery_house_length' into 'develop'
Aleksey Filippov [Mon, 2 Mar 2026 15:50:25 +0000 (15:50 +0000)]
Merge branch 'feature_filippov_ERP-251_fix_delivery_house_length' into 'develop'

fix(20260302): cast time() to string for request_id in LogService calls

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

2 weeks agofix(20260302): cast time() to string for request_id in LogService calls
Aleksey Filippov [Mon, 2 Mar 2026 15:46:50 +0000 (18:46 +0300)]
fix(20260302): cast time() to string for request_id in LogService calls

ApiLogs.request_id validates as string, but time() returns int causing
"Значение «Request ID» должно быть строкой" validation error on every request.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-251_fix_delivery_house_length' into 'develop'
Aleksey Filippov [Mon, 2 Mar 2026 15:27:12 +0000 (15:27 +0000)]
Merge branch 'feature_filippov_ERP-251_fix_delivery_house_length' into 'develop'

fix(ERP-251): replace file_put_contents with Yii logging in DataBuhController

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

2 weeks agofix(ERP-251): replace file_put_contents with Yii logging in DataBuhController
Aleksey Filippov [Mon, 2 Mar 2026 15:14:27 +0000 (18:14 +0300)]
fix(ERP-251): replace file_put_contents with Yii logging in DataBuhController

Hardcoded path /var/www/erp24/api2/json_buh does not exist on deploy
server (/var/www/erp24_deploy/), causing file_put_contents errors.
Replace debug file dumps with Yii::info/Yii::error under 'buh.upload'
category. Request data is already persisted via ApiCronBuh model.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-251_fix_delivery_house_length' into 'develop'
Aleksey Filippov [Mon, 2 Mar 2026 15:07:35 +0000 (15:07 +0000)]
Merge branch 'feature_filippov_ERP-251_fix_delivery_house_length' into 'develop'

fix(ERP-251): improve delivery address parsing from FlowWow emails

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

2 weeks agofix(ERP-251): improve delivery address parsing from FlowWow emails
Aleksey Filippov [Mon, 2 Mar 2026 15:01:39 +0000 (18:01 +0300)]
fix(ERP-251): improve delivery address parsing from FlowWow emails

parseAddressFromDeliveryText() did a naive comma-split on raw
deliveryText, treating date/time fragments and instructions like
"Уточните адрес доставки у получателя" as address fields. This caused
house field to exceed the 16-char DB column limit.

Now strips delivery type prefix, date/time patterns, and non-address
phrases before splitting. Handles 1-2 part addresses gracefully
instead of requiring 3+ comma-separated parts.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-251_fix_bonus_log_permission' into 'develop'
Aleksey Filippov [Mon, 2 Mar 2026 12:28:35 +0000 (12:28 +0000)]
Merge branch 'feature_filippov_ERP-251_fix_bonus_log_permission' into 'develop'

fix(ERP-251): replace file_put_contents with Yii::info() in BonusController

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

2 weeks agofix(ERP-251): replace file_put_contents with Yii::info() in BonusController origin/feature_filippov_ERP-251_fix_bonus_log_permission
Aleksey Filippov [Mon, 2 Mar 2026 10:25:36 +0000 (13:25 +0300)]
fix(ERP-251): replace file_put_contents with Yii::info() in BonusController

Replace USERS_AUTH_CALL_LOG2 file writes that caused permission denied
errors on production with standard Yii::info() logging under
'bonus.auth' category. Remove unused $LOG and $USERS_AUTH_CALL_LOG2
static properties.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-250_fix_writeoffs_null_check' into 'develop'
Aleksey Filippov [Mon, 2 Mar 2026 08:18:32 +0000 (08:18 +0000)]
Merge branch 'feature_filippov_ERP-250_fix_writeoffs_null_check' into 'develop'

fix(ERP-250): add null check for WriteOffsErp model in actionUpdate

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

2 weeks agofix(ERP-250): add null check for WriteOffsErp model in actionUpdate origin/feature_filippov_ERP-250_fix_writeoffs_null_check
Aleksey Filippov [Mon, 2 Mar 2026 08:16:52 +0000 (11:16 +0300)]
fix(ERP-250): add null check for WriteOffsErp model in actionUpdate

$query->one() can return null when the record is deleted, sent to 1C,
or the user has no store access. Without the check, line 1076 crashes
with "Call to a member function getRelation() on null".

Now throws NotFoundHttpException (404) as documented in the PHPDoc.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-248_fix_store_scope' into 'develop'
Aleksey Filippov [Sun, 1 Mar 2026 19:54:24 +0000 (19:54 +0000)]
Merge branch 'feature_filippov_ERP-248_fix_store_scope' into 'develop'

fix(ERP-248): move $store lookup before if/else to fix undefined variable

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

2 weeks agofix(ERP-248): move $store lookup before if/else to fix undefined variable origin/feature_filippov_ERP-248_fix_store_scope
Aleksey Filippov [Sun, 1 Mar 2026 19:52:15 +0000 (22:52 +0300)]
fix(ERP-248): move $store lookup before if/else to fix undefined variable

$store was defined only inside the "new order" block (line 1252), but
referenced in 5 places inside the "existing order" else-block (lines
1692, 1735, 1770, 1828, 2017), causing "Undefined variable $store"
on production.

Moved $warehouseGuid and $store assignment before the if/else split
so both branches share the same variable scope.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2 weeks agoMerge branch 'feature_filippov_ERP-248_fix_subsidy_fallback' into 'develop'
Aleksey Filippov [Sat, 28 Feb 2026 21:25:16 +0000 (00:25 +0300)]
Merge branch 'feature_filippov_ERP-248_fix_subsidy_fallback' into 'develop'

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>