2
2
3
3
namespace App \Admin \Controllers \Analytics ;
4
4
5
- use App \Enums \Order \UtmEnum ;
6
5
use App \Models \Orders \Order ;
6
+ use App \Models \User \User ;
7
7
use Encore \Admin \Grid ;
8
8
9
9
class OrderSourceController extends AbstractCustomerAnalyticController
@@ -28,18 +28,7 @@ protected function getInstanceColumnTitle(): string
28
28
*/
29
29
protected function getInstanceNameColumn (): string
30
30
{
31
- return 'CONCAT(utm_source, \'- \', utm_campaign) ' ;
32
- }
33
-
34
- /**
35
- * Generates additional grid columns for the given grid.
36
- *
37
- * @param $grid The grid object to generate columns for.
38
- */
39
- protected function additionalGridColumns ($ grid ): void
40
- {
41
- $ grid ->column ('channel_name ' , 'Канал ' )->display (fn () => UtmEnum::tryFrom ($ this ->instance_name )?->channelName());
42
- $ grid ->column ('company_name ' , 'Компания ' )->display (fn () => UtmEnum::tryFrom ($ this ->instance_name )?->companyName());
31
+ return 'CONCAT(orders.utm_source, \'- \', orders.utm_campaign) ' ;
43
32
}
44
33
45
34
/**
@@ -49,12 +38,58 @@ protected function getPreparedGrid(): Grid
49
38
{
50
39
$ grid = new Grid (new Order ());
51
40
52
- $ grid ->model ()->selectRaw ($ this ->getSelectSql ())
53
- ->withExpression ('LastUserOrders ' , $ this ->getLastUserOrdersQuery ())
41
+ // // $qq = User::selectRaw($this->getSelectSql())
42
+ // // ->leftJoin('orders', 'users.id', '=', 'orders.user_id')
43
+ // // // ->leftJoin('order_items', 'orders.id', '=', 'order_items.order_id')
44
+ // // ->groupBy('instance_name', 'users.id');
45
+
46
+ // // print_r($qq->toSql());
47
+ // // exit();
48
+
49
+ // // users.id AS user_id,
50
+ // // orders.created_at AS created_at,
51
+
52
+ // $orderCreatedAtStart = request()->input('order_created_at_start');
53
+ // $orderCreatedAtEnd = request()->input('order_created_at_end');
54
+
55
+ // $subQuery = <<<SQL
56
+ // (SELECT {$this->getInstanceNameColumn()} AS instance_name,
57
+ // users.id AS user_id,
58
+ // SUM(CASE WHEN orders.status_key IN ({$this->statuses['accepted']}) THEN DISTINCT() ELSE 0 END) AS accepted_count,
59
+ // SUM(CASE WHEN orders.status_key IN ({$this->statuses['in_progress']}) THEN 1 ELSE 0 END) AS in_progress_count,
60
+ // SUM(CASE WHEN orders.status_key IN ({$this->statuses['purchased']}) THEN 1 ELSE 0 END) AS purchased_count,
61
+ // SUM(CASE WHEN orders.status_key IN ({$this->statuses['canceled']}) THEN 1 ELSE 0 END) AS canceled_count,
62
+ // SUM(CASE WHEN orders.status_key IN ({$this->statuses['returned']}) THEN 1 ELSE 0 END) AS returned_count,
63
+ // SUM(1) AS total_count
64
+ // FROM orders LEFT JOIN users ON users.id = orders.user_id
65
+ // GROUP BY instance_name) AS userOrders
66
+ // SQL;
67
+
68
+ // // dd(\DB::statement($subQuery));
69
+
70
+ // $grid->model()
71
+ // ->select('instance_name', 'accepted_count', 'in_progress_count', 'purchased_count', 'canceled_count', 'returned_count', 'total_count')
72
+ // ->leftJoin(
73
+ // \DB::raw($subQuery),
74
+ // function ($join) {
75
+ // $join->on('users.id', '=', 'userOrders.user_id');
76
+ // }
77
+ // );
78
+
79
+ $ sub = \DB ::table ('orders ' )
80
+ ->selectRaw ($ this ->getSelectSql ())
54
81
->leftJoin ('users ' , 'users.id ' , '= ' , 'orders.user_id ' )
55
82
->leftJoin ('order_items ' , 'orders.id ' , '= ' , 'order_items.order_id ' )
83
+ ->where ('orders.created_at ' , '>= ' , '2024-01-04 00:00:00 ' )
56
84
->groupBy ('instance_name ' );
57
85
86
+ $ grid ->model ()
87
+ ->select ('qq.instance_name ' , 'qq.total_purchased_price ' , 'qq.total_lost_price ' )
88
+ ->from ($ sub , 'qq ' );
89
+ // ->leftJoin('users', 'users.id', '=', 'orders.user_id')
90
+ // ->leftJoin('order_items', 'orders.id', '=', 'order_items.order_id')
91
+ // ->groupBy('instance_name');
92
+
58
93
return $ grid ;
59
94
}
60
95
}
0 commit comments