From: Vladimir Fomichev Date: Thu, 19 Feb 2026 07:35:46 +0000 (+0300) Subject: Логика проставления номера заказа X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=03605101b16b4957f050e1a6df63ad479eee80f2;p=erp24_rep%2Fyii-erp24%2F.git Логика проставления номера заказа --- diff --git a/erp24/controllers/MarketplaceFlowwowEmailsController.php b/erp24/controllers/MarketplaceFlowwowEmailsController.php index 3f382e13..5055a96e 100644 --- a/erp24/controllers/MarketplaceFlowwowEmailsController.php +++ b/erp24/controllers/MarketplaceFlowwowEmailsController.php @@ -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) { diff --git a/erp24/services/MarketplaceService.php b/erp24/services/MarketplaceService.php index 327eabf8..5d1d7108 100644 --- a/erp24/services/MarketplaceService.php +++ b/erp24/services/MarketplaceService.php @@ -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 = ''; diff --git a/erp24/views/marketplace-flowwow-emails/index.php b/erp24/views/marketplace-flowwow-emails/index.php index a71ea666..4446dd40 100644 --- a/erp24/views/marketplace-flowwow-emails/index.php +++ b/erp24/views/marketplace-flowwow-emails/index.php @@ -17,6 +17,9 @@ $this->params['breadcrumbs'][] = $this->title; 'btn btn-primary my-4']) ?> 'btn btn-primary my-4']) ?> + 'display:inline']) ?> + 'btn btn-warning my-4', 'onclick' => 'return confirm("Заполнить marketplace_order_id из темы письма для всех обработанных записей без номера?")']) ?> +

title) ?>

'btn btn-primary my-4']) ?>