From: Vladimir Fomichev Date: Mon, 19 Jan 2026 13:55:37 +0000 (+0300) Subject: статусы отмены и отправки X-Git-Url: https://gitweb.erp-flowers.ru/?a=commitdiff_plain;h=df0339da4cb66e19fffbd2c59e298b1d4ba338c7;p=erp24_rep%2Fyii-erp24%2F.git статусы отмены и отправки --- diff --git a/erp24/services/OrderControlReportService.php b/erp24/services/OrderControlReportService.php index 7ef95e33..8e8ce048 100644 --- a/erp24/services/OrderControlReportService.php +++ b/erp24/services/OrderControlReportService.php @@ -202,7 +202,7 @@ class OrderControlReportService /** * Получает кандидатов "Завис в доставке" * - * Критерий: РМК статус = "Передан курьеру" (1004/1011) + * Критерий: РМК статус = "Передан курьеру" (по order_status_id/order_substatus_id → DELIVERY/COURIER_RECEIVED) * + МП статус НЕ "Выполнен" (НЕ DELIVERED и НЕ DELIVERY_SERVICE_DELIVERED) * * ВАЖНО: Это только кандидаты! Заказ становится проблемой "Завис в доставке" @@ -220,6 +220,21 @@ class OrderControlReportService $startDateStr = $dateRange['startDate']; $endDateStr = $dateRange['endDate']; + // Получаем ID статусов "Передан курьеру" из БД + $rmkCourierIds = $this->getRmkStatusCourier(); + + // Формируем плейсхолдеры для IN-условия + $rmkCourierPlaceholders = []; + $rmkCourierParams = []; + foreach ($rmkCourierIds as $index => $id) { + $placeholder = ':rmk_courier_' . $index; + $rmkCourierPlaceholders[] = $placeholder; + $rmkCourierParams[$placeholder] = $id; + } + $rmkCourierInClause = !empty($rmkCourierPlaceholders) + ? implode(', ', $rmkCourierPlaceholders) + : '0'; // fallback если статусов нет + // Выбираем заказы с РМК-статусом "Передан курьеру", где МП-статус НЕ "Выполнен" $sql = " SELECT @@ -242,7 +257,7 @@ class OrderControlReportService LEFT JOIN marketplace_order_status_types most ON most.id = mo.status_id LEFT JOIN marketplace_order_status_types mosub ON mosub.id = mo.substatus_id WHERE mo.fake = 0 - AND mo.status_processing_1c::integer IN (:rmk_1004, :rmk_1011) + AND mo.status_processing_1c::integer IN ({$rmkCourierInClause}) AND mo.updated_at >= :start_date AND mo.updated_at <= :end_date AND ( @@ -252,14 +267,14 @@ class OrderControlReportService ORDER BY cs.name ASC, mo.creation_date DESC "; - $orders = Yii::$app->db->createCommand($sql, [ - ':rmk_1004' => 1004, - ':rmk_1011' => 1011, + $params = array_merge([ ':start_date' => $startDateStr, ':end_date' => $endDateStr, ':delivered' => MarketplaceOrderStatusTypes::DELIVERED_CODE, ':delivery_service_delivered' => MarketplaceOrderStatusTypes::DELIVERY_SERVICE_DELIVERED_CODE, - ])->queryAll(); + ], $rmkCourierParams); + + $orders = Yii::$app->db->createCommand($sql, $params)->queryAll(); $issues = []; foreach ($orders as $orderData) { @@ -503,7 +518,7 @@ class OrderControlReportService * Получает заказы типа "Отмена без обработки" * * Критерий: МП статус = "Отменён" (CANCELLED) - * + РМК статус НЕ "Отказ" (НЕ 1006/1013) + * + РМК статус НЕ "Отказ" (cancelled_order = 1 в marketplace_order_1c_statuses) * * @param int $hoursAgo Период выборки в часах (по умолчанию 24) * @return OrderIssue[] @@ -517,6 +532,21 @@ class OrderControlReportService $startDateStr = $dateRange['startDate']; $endDateStr = $dateRange['endDate']; + // Получаем ID статусов "Отказ" из БД + $rmkCancelIds = $this->getRmkStatusCancel(); + + // Формируем плейсхолдеры для NOT IN-условия + $rmkCancelPlaceholders = []; + $rmkCancelParams = []; + foreach ($rmkCancelIds as $index => $id) { + $placeholder = ':rmk_cancel_' . $index; + $rmkCancelPlaceholders[] = $placeholder; + $rmkCancelParams[$placeholder] = $id; + } + $rmkCancelInClause = !empty($rmkCancelPlaceholders) + ? implode(', ', $rmkCancelPlaceholders) + : '0'; // fallback если статусов нет + // Выбираем заказы с МП-статусом "Отменён", где РМК-статус НЕ "Отказ" $sql = " SELECT @@ -544,18 +574,18 @@ class OrderControlReportService AND most.code = :cancelled AND ( mo.status_processing_1c IS NULL - OR mo.status_processing_1c::integer NOT IN (:rmk_1006, :rmk_1013) + OR mo.status_processing_1c::integer NOT IN ({$rmkCancelInClause}) ) ORDER BY cs.name ASC, mo.creation_date DESC "; - $orders = Yii::$app->db->createCommand($sql, [ + $params = array_merge([ ':start_date' => $startDateStr, ':end_date' => $endDateStr, ':cancelled' => MarketplaceOrderStatusTypes::CANSELLED_CODE, - ':rmk_1006' => 1006, - ':rmk_1013' => 1013, - ])->queryAll(); + ], $rmkCancelParams); + + $orders = Yii::$app->db->createCommand($sql, $params)->queryAll(); $issues = []; foreach ($orders as $orderData) {