]);
}
+ /**
+ * Проставляет 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) {
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 = '';
<?= 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']) ?>