]> gitweb.erp-flowers.ru Git - erp24_rep/yii-erp24/.git/commitdiff
статусы отмены и отправки
authorVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 19 Jan 2026 13:55:37 +0000 (16:55 +0300)
committerVladimir Fomichev <vladimir.fomichev@erp-flowers.ru>
Mon, 19 Jan 2026 13:55:37 +0000 (16:55 +0300)
erp24/services/OrderControlReportService.php

index 7ef95e33b8b85e5bf212279fe99f4ca3bed3f6b4..8e8ce0481015b66f63d9c933f9ea648458b97148 100644 (file)
@@ -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) {