Format prices in frontend

[MAILPOET-5092]
This commit is contained in:
David Remer
2023-06-16 12:31:58 +03:00
committed by Aschepikov
parent be29c00f08
commit 1bd4050c1a
4 changed files with 10 additions and 50 deletions

View File

@ -8,6 +8,7 @@ import { select, useSelect } from '@wordpress/data';
import { MailPoet } from '../../../../../../mailpoet'; import { MailPoet } from '../../../../../../mailpoet';
import { OverviewSection, storeName } from '../../store'; import { OverviewSection, storeName } from '../../store';
import { locale } from '../../../../../config'; import { locale } from '../../../../../config';
import {formattedPrice} from "../../formatter";
function getEmailPercentage( function getEmailPercentage(
type: 'opened' | 'clicked', type: 'opened' | 'clicked',
@ -119,7 +120,7 @@ export function Overview(): JSX.Element | null {
key="overview-revenue" key="overview-revenue"
label={__('Revenue', 'mailpoet')} label={__('Revenue', 'mailpoet')}
delta={getWooCommerceDelta('revenue').toFixed(2) as unknown as number} delta={getWooCommerceDelta('revenue').toFixed(2) as unknown as number}
value={overview.data?.revenue_formatted?.current} value={formattedPrice(overview.data !== undefined ? overview.data.revenue.current : 0)}
/>, />,
); );
} }

View File

@ -1,12 +1,13 @@
import {EmailStats} from "../../../store";
import {__, sprintf} from "@wordpress/i18n"; import {__, sprintf} from "@wordpress/i18n";
import {EmailStats} from "../../../store";
import {Actions} from "./actions"; import {Actions} from "./actions";
import {locale} from "../../../../../../config"; import {locale} from "../../../../../../config";
import {Cell} from "./cell"; import {Cell} from "./cell";
import {formattedPrice} from "../../../formatter";
const percentageFormatter = Intl.NumberFormat(locale.toString(), { style: 'percent', maximumFractionDigits: 2 }); const percentageFormatter = Intl.NumberFormat(locale.toString(), { style: 'percent', maximumFractionDigits: 2 });
function calculatePercentage(value: number, base: number, canBeNegative: boolean = false) : number { function calculatePercentage(value: number, base: number, canBeNegative = false) : number {
if (base === 0) { if (base === 0) {
return 0; return 0;
} }
@ -17,7 +18,9 @@ function calculatePercentage(value: number, base: number, canBeNegative: boolean
function percentageBadgeCalculation(percentage:number) : {badge: string, badgeType: string} { function percentageBadgeCalculation(percentage:number) : {badge: string, badgeType: string} {
if (percentage > 3) { if (percentage > 3) {
return {badge: __('Excellent', 'mailpoet'), badgeType: 'mailpoet-analytics-badge-success'} return {badge: __('Excellent', 'mailpoet'), badgeType: 'mailpoet-analytics-badge-success'}
} else if (percentage > 1) { }
if (percentage > 1) {
return {badge: __('Good', 'mailpoet'), badgeType: 'mailpoet-analytics-badge-success'} return {badge: __('Good', 'mailpoet'), badgeType: 'mailpoet-analytics-badge-success'}
} }
return {badge: __('Average', 'mailpoet'), badgeType: 'mailpoet-analytics-badge-warning'} return {badge: __('Average', 'mailpoet'), badgeType: 'mailpoet-analytics-badge-warning'}
@ -78,7 +81,7 @@ export function transformEmailsToRows(emails: EmailStats[]) {
}, },
{ {
display: <Cell display: <Cell
value={email.revenue_formatted.current} value={formattedPrice(email.revenue.current)}
/>, />,
value: email.revenue.current value: email.revenue.current
}, },

View File

@ -22,7 +22,6 @@ export type EmailStats = {
clicked: CurrentAndPrevious; clicked: CurrentAndPrevious;
orders: CurrentAndPrevious; orders: CurrentAndPrevious;
revenue: CurrentAndPrevious; revenue: CurrentAndPrevious;
revenue_formatted: CurrentAndPrevious;
unsubscribed: CurrentAndPrevious; unsubscribed: CurrentAndPrevious;
}; };
@ -32,7 +31,6 @@ type OverviewSectionData = SectionData & {
orders: CurrentAndPrevious; orders: CurrentAndPrevious;
unsubscribed: CurrentAndPrevious; unsubscribed: CurrentAndPrevious;
revenue: CurrentAndPrevious; revenue: CurrentAndPrevious;
revenue_formatted: CurrentAndPrevious;
sent: CurrentAndPrevious; sent: CurrentAndPrevious;
emails: Record<string, EmailStats>; emails: Record<string, EmailStats>;
}; };

View File

@ -11,7 +11,6 @@ use MailPoet\Entities\StatisticsOpenEntity;
use MailPoet\Newsletter\NewslettersRepository; use MailPoet\Newsletter\NewslettersRepository;
use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository; use MailPoet\Newsletter\Statistics\NewsletterStatisticsRepository;
use MailPoet\Newsletter\Statistics\WooCommerceRevenue; use MailPoet\Newsletter\Statistics\WooCommerceRevenue;
use MailPoet\WooCommerce\Helper;
class OverviewStatisticsController { class OverviewStatisticsController {
/** @var NewslettersRepository */ /** @var NewslettersRepository */
@ -20,27 +19,16 @@ class OverviewStatisticsController {
/** @var NewsletterStatisticsRepository */ /** @var NewsletterStatisticsRepository */
private $newsletterStatisticsRepository; private $newsletterStatisticsRepository;
/** @var Helper */
private $wooCommerceHelper;
public function __construct( public function __construct(
NewslettersRepository $newslettersRepository, NewslettersRepository $newslettersRepository,
NewsletterStatisticsRepository $newsletterStatisticsRepository, NewsletterStatisticsRepository $newsletterStatisticsRepository
Helper $wooCommerceHelper
) { ) {
$this->newslettersRepository = $newslettersRepository; $this->newslettersRepository = $newslettersRepository;
$this->newsletterStatisticsRepository = $newsletterStatisticsRepository; $this->newsletterStatisticsRepository = $newsletterStatisticsRepository;
$this->wooCommerceHelper = $wooCommerceHelper;
} }
public function getStatisticsForAutomation(Automation $automation, Query $query): array { public function getStatisticsForAutomation(Automation $automation, Query $query): array {
$emails = $this->getEmailsFromAutomation($automation); $emails = $this->getEmailsFromAutomation($automation);
$formattedEmptyRevenue = $this->wooCommerceHelper->getRawPrice(
0,
[
'currency' => $this->wooCommerceHelper->getWoocommerceCurrency(),
]
);
$data = [ $data = [
'sent' => ['current' => 0, 'previous' => 0], 'sent' => ['current' => 0, 'previous' => 0],
'opened' => ['current' => 0, 'previous' => 0], 'opened' => ['current' => 0, 'previous' => 0],
@ -48,10 +36,6 @@ class OverviewStatisticsController {
'orders' => ['current' => 0, 'previous' => 0], 'orders' => ['current' => 0, 'previous' => 0],
'unsubscribed' => ['current' => 0, 'previous' => 0], 'unsubscribed' => ['current' => 0, 'previous' => 0],
'revenue' => ['current' => 0, 'previous' => 0], 'revenue' => ['current' => 0, 'previous' => 0],
'revenue_formatted' => [
'current' => $formattedEmptyRevenue,
'previous' => $formattedEmptyRevenue,
],
'emails' => [], 'emails' => [],
]; ];
if (!$emails) { if (!$emails) {
@ -87,12 +71,6 @@ class OverviewStatisticsController {
$data['emails'][$newsletterId]['unsubscribed']['current'] = $statistic->getUnsubscribeCount(); $data['emails'][$newsletterId]['unsubscribed']['current'] = $statistic->getUnsubscribeCount();
$data['emails'][$newsletterId]['orders']['current'] = $statistic->getWooCommerceRevenue() ? $statistic->getWooCommerceRevenue()->getOrdersCount() : 0; $data['emails'][$newsletterId]['orders']['current'] = $statistic->getWooCommerceRevenue() ? $statistic->getWooCommerceRevenue()->getOrdersCount() : 0;
$data['emails'][$newsletterId]['revenue']['current'] = $statistic->getWooCommerceRevenue() ? $statistic->getWooCommerceRevenue()->getValue() : 0; $data['emails'][$newsletterId]['revenue']['current'] = $statistic->getWooCommerceRevenue() ? $statistic->getWooCommerceRevenue()->getValue() : 0;
$data['emails'][$newsletterId]['revenue_formatted']['current'] = $this->wooCommerceHelper->getRawPrice(
$data['emails'][$newsletterId]['revenue']['current'],
[
'currency' => $this->wooCommerceHelper->getWoocommerceCurrency(),
]
);
$data['emails'][$newsletterId]['order'] = count($data['emails']); $data['emails'][$newsletterId]['order'] = count($data['emails']);
} }
@ -116,28 +94,8 @@ class OverviewStatisticsController {
$data['emails'][$newsletterId]['unsubscribed']['previous'] = $statistic->getUnsubscribeCount(); $data['emails'][$newsletterId]['unsubscribed']['previous'] = $statistic->getUnsubscribeCount();
$data['emails'][$newsletterId]['orders']['previous'] = $statistic->getWooCommerceRevenue() ? $statistic->getWooCommerceRevenue()->getOrdersCount() : 0; $data['emails'][$newsletterId]['orders']['previous'] = $statistic->getWooCommerceRevenue() ? $statistic->getWooCommerceRevenue()->getOrdersCount() : 0;
$data['emails'][$newsletterId]['revenue']['previous'] = $statistic->getWooCommerceRevenue() ? $statistic->getWooCommerceRevenue()->getValue() : 0; $data['emails'][$newsletterId]['revenue']['previous'] = $statistic->getWooCommerceRevenue() ? $statistic->getWooCommerceRevenue()->getValue() : 0;
$data['emails'][$newsletterId]['revenue_formatted']['current'] = $this->wooCommerceHelper->getRawPrice(
$data['emails'][$newsletterId]['revenue']['current'],
[
'currency' => $this->wooCommerceHelper->getWoocommerceCurrency(),
]
);
} }
$data['revenue_formatted']['current'] = $this->wooCommerceHelper->getRawPrice(
$data['revenue']['current'],
[
'currency' => $this->wooCommerceHelper->getWoocommerceCurrency(),
]
);
$data['revenue_formatted']['previous'] = $this->wooCommerceHelper->getRawPrice(
$data['revenue']['previous'],
[
'currency' => $this->wooCommerceHelper->getWoocommerceCurrency(),
]
);
return $data; return $data;
} }