]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
Логика проставления номера заказа
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 19 Feb 2026 07:35:46 +0000 (10:35 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Thu, 19 Feb 2026 07:35:46 +0000 (10:35 +0300)
erp24/controllers/MarketplaceFlowwowEmailsController.php
erp24/services/MarketplaceService.php
erp24/views/marketplace-flowwow-emails/index.php

index 3f382e13ffd1a902359aa27e378a5a8136682d56..5055a96eed28d315dc4de9add1cea30cb42f0dc5 100644 (file)
@@ -63,6 +63,35 @@ class MarketplaceFlowwowEmailsController extends Controller
         ]);
     }
 
+    /**
+     * Проставляет marketplace_order_id из темы письма для обработанных записей, где он не заполнен.
+     * Извлекает номер по паттерну №XXXX из subject.
+     */
+    public function actionFillMissingOrderIds(): \yii\web\Response
+    {
+        if (!Yii::$app->request->isPost) {
+            throw new \yii\web\BadRequestHttpException('Только POST.');
+        }
+
+        $emails = MarketplaceFlowwowEmails::find()
+            ->where(['or', ['marketplace_order_id' => null], ['marketplace_order_id' => '']])
+            ->andWhere(['email_status' => MarketplaceFlowwowEmails::STATUS_PROCESSED])
+            ->all();
+
+        $updated = 0;
+        foreach ($emails as $email) {
+            if (preg_match('/№(\d+)/', $email->subject, $matches)) {
+                $email->marketplace_order_id = $matches[1];
+                if ($email->save(false, ['marketplace_order_id'])) {
+                    $updated++;
+                }
+            }
+        }
+
+        Yii::$app->session->setFlash('success', "Обновлено записей: {$updated} из " . count($emails));
+        return $this->redirect(['index']);
+    }
+
     public function actionDecodeBodies()
     {
         if (Yii::$app->request->isPost) {
index 327eabf8a0058e87a63c3c60905f40b5a17e06b0..5d1d7108208069bf1897c3c3332371d591bc9c3b 100644 (file)
@@ -2582,6 +2582,11 @@ class MarketplaceService
             Yii::warning('Не найден заголовок заказа (h1) в HTML', __METHOD__);
         }
 
+        // Fallback: извлекаем номер заказа из темы письма, если из h1 не получилось
+        if (empty($orderNumber) && !empty($message['subject']) && preg_match('/№(\d+)/', $message['subject'], $matches)) {
+            $orderNumber = (int)$matches[1];
+        }
+
         $orderDetails['number'] = $orderNumber;
         $orderDetails['date'] = $message['date'];
         $deliveryText = '';
index a71ea6664d1bb5121a15a8a62c989b6a8fdc2c7a..4446dd4020d35bfedeae137c7812c29ffb0eff70 100644 (file)
@@ -17,6 +17,9 @@ $this->params['breadcrumbs'][] = $this->title;
 
     <?= Html::a('к Заказам', ['/marketplace-orders/index'], ['class' => 'btn btn-primary my-4']) ?>
     <?= Html::a('Декодировать', ['/marketplace-flowwow-emails/decode-bodies'], ['class' => 'btn btn-primary my-4']) ?>
+    <?= Html::beginForm(['/marketplace-flowwow-emails/fill-missing-order-ids'], 'post', ['style' => 'display:inline']) ?>
+    <?= Html::submitButton('Заполнить номера заказов', ['class' => 'btn btn-warning my-4', 'onclick' => 'return confirm("Заполнить marketplace_order_id из темы письма для всех обработанных записей без номера?")']) ?>
+    <?= Html::endForm() ?>
         <h1><?= Html::encode($this->title) ?></h1>
 
     <?= Html::a('Тестирование разбора письма', ['/marketplace-orders/test-order-parsing'], ['class' => 'btn btn-primary my-4']) ?>