}
if (in_array($statusId1C->status_id, $statuses1cWithCancelledId)) {
$marketplaceOrder->cancelled_order_source = '1c';
- $marketplaceOrder->cancelled_order_date = date('Y-m-d H:m:s');
+ $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
}
- $incomingSellerId = $mpOrder['seller_id'] ?? null;
- $emptyGuid = '00000000-0000-0000-0000-000000000000';
- $isSellerIdEmpty = empty($incomingSellerId) || $incomingSellerId === $emptyGuid;
- $isCheckGuidEmpty = empty($marketplaceOrder->check_guid);
- $successfulOrderIds = MarketplaceOrder1cStatuses::getSuccessfulOrderIds();
-
- // Не устанавливаем статус "Успех" без seller_id или без check_guid
- if (in_array($statusId1C->id, $successfulOrderIds) && ($isSellerIdEmpty || $isCheckGuidEmpty)) {
- Yii::warning(
- "Статус 'Успех' (ID: {$statusId1C->id}) без seller_id или check_guid для заказа {$mpOrder['id']}. " .
- "seller_id: " . ($incomingSellerId ?? 'null') . ", check_guid: " . ($marketplaceOrder->check_guid ?? 'null'),
- 'marketplace-status'
- );
- } else {
+ // Проверяем, можно ли установить статус "Успех" (seller_id и check_guid должны быть заполнены)
+ if (MarketplaceService::canSetSuccessStatus($statusId1C, $mpOrder, $marketplaceOrder)) {
$marketplaceOrder->status_processing_1c = $statusId1C->id;
}
- $marketplaceOrder->seller_id = $isSellerIdEmpty ? null : $incomingSellerId;
+ $marketplaceOrder->seller_id = MarketplaceService::normalizeSellerId($mpOrder['seller_id'] ?? null);
$marketplaceOrder->number_1c = $mpOrder['number'] ?? null;
'dsn' => sprintf(
'%s://%s:%s@%s:%d',
getenv('MAIL_SCHEME') ?: 'smtps',
- rawurlencode(getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru'),
+ rawurlencode(getenv('MAIL_USERNAME') ?: 'noreply@localhost'),
rawurlencode(getenv('MAIL_PASSWORD') ?: ''),
getenv('MAIL_HOST') ?: 'smtp.yandex.ru',
(int)(getenv('MAIL_PORT') ?: 465)
'telegram_max_message_length' => 4000,
// Telegram: chat_id канала (получить через @userinfobot или API после вступления бота в канал)
// Канал по ТЗ: https://t.me/+wHh_lW83AvVlYWNi
- 'telegram_chat_id_dev' => getenv('TELEGRAM_ORDER_CONTROL_CHAT_ID_DEV') ?: '-1001861631125',
- 'telegram_chat_id_prod' => getenv('TELEGRAM_ORDER_CONTROL_CHAT_ID_PROD') ?: '4886272326',
+ 'telegram_chat_id_dev' => getenv('TELEGRAM_ORDER_CONTROL_CHAT_ID_DEV') ?: '',
+ 'telegram_chat_id_prod' => getenv('TELEGRAM_ORDER_CONTROL_CHAT_ID_PROD') ?: '',
// Email получатели по ТЗ
'email_recipients_test' => array_filter(explode(',', getenv('ORDER_CONTROL_EMAIL_RECIPIENTS_TEST') ?: 'vladimir.fomichev@erp-flowers.ru,aleksey.filippov@erp-flowers.ru')),
'email_recipients' => array_filter(explode(',', getenv('ORDER_CONTROL_EMAIL_RECIPIENTS') ?: 'ekaterina.geldak@bazacvetov24.ru,irina.rogacheva@bazacvetov24.ru,alena.chelyshkina@bazacvetov24.ru')),
'dsn' => sprintf(
'%s://%s:%s@%s:%d',
getenv('MAIL_SCHEME') ?: 'smtps',
- rawurlencode(getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru'),
+ rawurlencode(getenv('MAIL_USERNAME') ?: 'noreply@localhost'),
rawurlencode(getenv('MAIL_PASSWORD') ?: ''),
getenv('MAIL_HOST') ?: 'smtp.yandex.ru',
(int)(getenv('MAIL_PORT') ?: 465)
return false;
}
+ /**
+ * Проверяет, можно ли установить статус "Успех" для заказа маркетплейса
+ *
+ * Статус "Успех" не должен устанавливаться, если:
+ * - seller_id отсутствует, пустой или содержит нулевой GUID
+ * - check_guid заказа отсутствует
+ *
+ * @param MarketplaceOrder1cStatuses $statusId1C Статус 1С, который пытаемся установить
+ * @param array $mpOrder Данные заказа из 1С (должен содержать ключ 'seller_id')
+ * @param MarketplaceOrders $marketplaceOrder Запись заказа маркетплейса
+ * @return bool true — статус можно устанавливать, false — заблокирован (seller_id/check_guid отсутствует)
+ */
+ public static function canSetSuccessStatus(
+ MarketplaceOrder1cStatuses $statusId1C,
+ array $mpOrder,
+ MarketplaceOrders $marketplaceOrder
+ ): bool {
+ $emptyGuid = '00000000-0000-0000-0000-000000000000';
+ $successfulOrderIds = MarketplaceOrder1cStatuses::getSuccessfulOrderIds();
+
+ if (!in_array($statusId1C->id, $successfulOrderIds)) {
+ return true;
+ }
+
+ $incomingSellerId = $mpOrder['seller_id'] ?? null;
+ $isSellerIdEmpty = empty($incomingSellerId) || $incomingSellerId === $emptyGuid;
+ $isCheckGuidEmpty = empty($marketplaceOrder->check_guid);
+ if ($isSellerIdEmpty || $isCheckGuidEmpty) {
+ Yii::warning(
+ "Статус 'Успех' (ID: {$statusId1C->id}) без seller_id или check_guid для заказа {$mpOrder['id']}. " .
+ "seller_id: " . ($incomingSellerId ?? 'null') . ", check_guid: " . ($marketplaceOrder->check_guid ?? 'null'),
+ 'marketplace-status'
+ );
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Нормализует seller_id из данных 1С
+ *
+ * Возвращает null если seller_id пустой или содержит нулевой GUID,
+ * иначе возвращает оригинальное значение.
+ *
+ * @param string|null $sellerId Значение seller_id из данных 1С
+ * @return string|null Нормализованный seller_id или null
+ */
+ public static function normalizeSellerId(?string $sellerId): ?string
+ {
+ $emptyGuid = '00000000-0000-0000-0000-000000000000';
+
+ if (empty($sellerId) || $sellerId === $emptyGuid) {
+ return null;
+ }
+
+ return $sellerId;
+ }
}
/**\r
* Режим асинхронной отправки: использовать Job-очередь вместо блокирующего sleep()\r
*/\r
- private bool $asyncMode = true;\r
+ private bool $asyncMode = false;\r
\r
/**\r
* Уникальный идентификатор отчёта (для логирования и отслеживания Job-ов)\r
->setHtmlBody($html);\r
\r
// Устанавливаем отправителя, если настроен\r
- $fromEmail = getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru';\r
+ $fromEmail = getenv('MAIL_USERNAME') ?: 'noreply@localhost';\r
$message->setFrom([$fromEmail => 'ERP24 Контроль МП']);\r
\r
$sent = $message->send();\r
private function sendToEmailAsync(string $html, array $recipients): bool\r
{\r
$subject = $this->config['email_subject'] ?? 'Контроль статусов заказов МП';\r
- $fromEmail = getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru';\r
+ $fromEmail = getenv('MAIL_USERNAME') ?: 'noreply@localhost';\r
\r
// Формируем DSN для Symfony Mailer\r
$mailerDsn = $this->buildMailerDsn();\r
}
if (in_array($statusId1C->status_id, $statuses1cWithCancelledId)) {
$marketplaceOrder->cancelled_order_source = '1c';
- $marketplaceOrder->cancelled_order_date = date('Y-m-d H:m:s');
+ $marketplaceOrder->cancelled_order_date = date('Y-m-d H:i:s');
}
- $incomingSellerId = $mpOrder['seller_id'] ?? null;
- $emptyGuid = '00000000-0000-0000-0000-000000000000';
- $isSellerIdEmpty = empty($incomingSellerId) || $incomingSellerId === $emptyGuid;
- $isCheckGuidEmpty = empty($marketplaceOrder->check_guid);
- $successfulOrderIds = MarketplaceOrder1cStatuses::getSuccessfulOrderIds();
-
- // Не устанавливаем статус "Успех" без seller_id или без check_guid
- if (in_array($statusId1C->id, $successfulOrderIds) && ($isSellerIdEmpty || $isCheckGuidEmpty)) {
- Yii::warning(
- "Статус 'Успех' (ID: {$statusId1C->id}) без seller_id или check_guid для заказа {$mpOrder['id']}. " .
- "seller_id: " . ($incomingSellerId ?? 'null') . ", check_guid: " . ($marketplaceOrder->check_guid ?? 'null'),
- 'marketplace-status'
- );
- } else {
+ // Проверяем, можно ли установить статус "Успех" (seller_id и check_guid должны быть заполнены)
+ if (MarketplaceService::canSetSuccessStatus($statusId1C, $mpOrder, $marketplaceOrder)) {
$marketplaceOrder->status_processing_1c = $statusId1C->id;
}
- $marketplaceOrder->seller_id = $isSellerIdEmpty ? null : $incomingSellerId;
+ $marketplaceOrder->seller_id = MarketplaceService::normalizeSellerId($mpOrder['seller_id'] ?? null);
$marketplaceOrder->number_1c = $mpOrder['number'] ?? null;
public function testEmailSenderFromConfiguration(): void
{
// Из кода OrderControlReportService::sendToEmail():
- // $fromEmail = getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru';
+ // $fromEmail = getenv('MAIL_USERNAME') ?: 'noreply@localhost';
// $message->setFrom([$fromEmail => 'ERP24 Контроль МП']);
- $expectedDefaultSender = 'flow@bazacvetov24.ru';
+ $expectedDefaultSender = 'noreply@localhost';
$expectedSenderName = 'ERP24 Контроль МП';
$this->assertNotEmpty($expectedDefaultSender);
// $message->setFrom([$fromEmail => 'ERP24 Контроль МП']);
$expectedSubject = 'Контроль статусов заказов МП';
- $expectedFromEmail = 'flow@bazacvetov24.ru';
+ $expectedFromEmail = 'noreply@localhost';
$expectedFromName = 'ERP24 Контроль МП';
$expectedRecipients = ['test@example.com'];
$recipients = $recipientsMethod->invoke($this->service);
// Получаем информацию об отправителе Email
- $fromEmail = getenv('MAIL_USERNAME') ?: 'flow@bazacvetov24.ru';
+ $fromEmail = getenv('MAIL_USERNAME') ?: 'noreply@localhost';
$fromName = 'ERP24 Контроль МП';
// Определяем окружение