From fc5fc01df3bf4f4a09b7b10d77892a32d778982e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Jakes=CC=8C?= Date: Thu, 2 May 2019 15:09:29 +0200 Subject: [PATCH] Add WooCommerce revenues to computed statistics [MAILPOET-1853] --- lib/Models/Newsletter.php | 22 ++++++++++++++++++++++ lib/WooCommerce/Helper.php | 9 +++++++++ 2 files changed, 31 insertions(+) diff --git a/lib/Models/Newsletter.php b/lib/Models/Newsletter.php index 2dbacf89d1..fb4a5ed510 100644 --- a/lib/Models/Newsletter.php +++ b/lib/Models/Newsletter.php @@ -6,6 +6,7 @@ use MailPoet\Settings\SettingsController; use MailPoet\Tasks\Sending as SendingTask; use MailPoet\Util\Helpers; use MailPoet\Util\Security; +use MailPoet\WooCommerce\Helper as WCHelper; use MailPoet\WP\Emoji; use function MailPoet\Util\array_column; use MailPoet\WP\Functions as WPFunctions; @@ -587,6 +588,27 @@ class Newsletter extends Model { $result[$name] = !empty($row->cnt) ? (int)$row->cnt : 0; } + // WooCommerce revenues + $woocommerce_helper = new WCHelper(); + if ($woocommerce_helper->isWooCommerceActive()) { + $currency = $woocommerce_helper->getWoocommerceCurrency(); + $row = StatisticsWooCommercePurchases::selectExpr('SUM(order_price_total) AS total') + ->where([ + 'newsletter_id' => $this->id, + 'order_currency' => $currency, + ]) + ->findOne(); + + $revenue = !empty($row->total) ? (float)$row->total : 0.0; + $result['revenue'] = [ + 'currency' => $currency, + 'value' => $revenue, + 'formatted' => $woocommerce_helper->getRawPrice($revenue, ['currency' => $currency]), + ]; + } else { + $result['revenue'] = null; + } + return $result; } diff --git a/lib/WooCommerce/Helper.php b/lib/WooCommerce/Helper.php index f67c7f4ea9..71495584e5 100644 --- a/lib/WooCommerce/Helper.php +++ b/lib/WooCommerce/Helper.php @@ -35,10 +35,19 @@ class Helper { return wc_get_product($the_product); } + function getWoocommerceCurrency() { + return get_woocommerce_currency(); + } + function getOrdersCount() { $counts = $this->wp->wpCountPosts('shop_order'); return array_reduce((array)$counts, function($sum, $count_for_state) { return $sum + (int)$count_for_state; }); } + + function getRawPrice($price, array $args = []) { + $html_price = $this->wcPrice($price, $args); + return html_entity_decode(strip_tags($html_price)); + } }