/**
* Получает кандидатов "Завис в доставке"
*
- * Критерий: РМК статус = "Передан курьеру" (1004/1011)
+ * Критерий: РМК статус = "Передан курьеру" (по order_status_id/order_substatus_id → DELIVERY/COURIER_RECEIVED)
* + МП статус НЕ "Выполнен" (НЕ DELIVERED и НЕ DELIVERY_SERVICE_DELIVERED)
*
* ВАЖНО: Это только кандидаты! Заказ становится проблемой "Завис в доставке"
$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
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 (
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) {
* Получает заказы типа "Отмена без обработки"
*
* Критерий: МП статус = "Отменён" (CANCELLED)
- * + РМК статус НЕ "Отказ" (НЕ 1006/1013)
+ * + РМК статус НЕ "Отказ" (cancelled_order = 1 в marketplace_order_1c_statuses)
*
* @param int $hoursAgo Период выборки в часах (по умолчанию 24)
* @return OrderIssue[]
$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
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) {