TotalSales.php
1.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?php
namespace ACA\WC\Search\User;
use ACP\Search\Comparison;
use ACP\Search\Helper\Sql\ComparisonFactory;
use ACP\Search\Operators;
use ACP\Search\Query\Bindings;
use ACP\Search\Value;
class TotalSales extends Comparison
{
public function __construct()
{
$operators = new Operators([
Operators::GT,
Operators::LT,
Operators::BETWEEN,
]);
parent::__construct($operators, Value::INT);
}
protected function create_query_bindings($operator, Value $value)
{
global $wpdb;
$bindings = new Bindings();
$having = ComparisonFactory::create('total', $operator, $value);
$statuses = array_map('esc_sql', wc_get_is_paid_statuses());
$statuses_sql = "AND wco.status IN( 'wc-" . implode("','wc-", $statuses) . "' )";
$sql = "
SELECT wco.customer_id, SUM(total_amount) as total
FROM {$wpdb->prefix}wc_orders AS wco
WHERE wco.customer_id IS NOT NULL {$statuses_sql}
GROUP BY wco.customer_id
HAVING {$having->prepare()}";
$sq_alias = $bindings->get_unique_alias('sq');
$bindings->join("JOIN ( {$sql} ) as $sq_alias on $sq_alias.customer_id = {$wpdb->users}.ID");
return $bindings;
}
}