Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into translate
Browse files Browse the repository at this point in the history
  • Loading branch information
rootpd committed Jun 2, 2022
2 parents 69af533 + ee636dd commit 53db6d9
Show file tree
Hide file tree
Showing 13 changed files with 324 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,52 @@

namespace Crm\ProductsModule\Components;

use Crm\ApplicationModule\Cache\CacheRepository;
use Crm\ApplicationModule\Widget\BaseWidget;
use Crm\ApplicationModule\Widget\WidgetManager;
use Crm\SegmentModule\SegmentWidgetInterface;
use Crm\UsersModule\Repository\UserMetaRepository;
use Nette\Database\Table\ActiveRow;

class AvgProductsPaymentWidget extends BaseWidget
class AvgProductsPaymentWidget extends BaseWidget implements SegmentWidgetInterface
{
private $templateName = 'avg_products_payment_widget.latte';
private string $templateName = 'avg_products_payment_widget.latte';

private $userMetaRepository;
private UserMetaRepository $userMetaRepository;
private CacheRepository $cacheRepository;

public function __construct(WidgetManager $widgetManager, UserMetaRepository $userMetaRepository)
{
public function __construct(
WidgetManager $widgetManager,
UserMetaRepository $userMetaRepository,
CacheRepository $cacheRepository
) {
parent::__construct($widgetManager);
$this->userMetaRepository = $userMetaRepository;
$this->cacheRepository = $cacheRepository;
}

public function identifier()
{
return 'avgproductspaymentwidget';
}

public function render(array $userIds)
public function render(ActiveRow $segment)
{
if (!$this->isWidgetUsable($segment)) {
return;
}

$avgProductPayments = $this->cacheRepository->load($this->getCacheKey($segment));

$this->template->avgProductPayments = $avgProductPayments->value ?? 0;
$this->template->updatedAt = $avgProductPayments->updated_at ?? null;
$this->template->setFile(__DIR__ . DIRECTORY_SEPARATOR . $this->templateName);
$this->template->render();
}

public function recalculate(ActiveRow $segment, array $userIds): void
{
if (!count($userIds)) {
if (!$this->isWidgetUsable($segment)) {
return;
}

Expand All @@ -35,8 +57,16 @@ public function render(array $userIds)
->where(['key' => 'product_payments', 'user_id' => $userIds])
->fetch();

$this->template->avgProductPayments = $result->sum / count($userIds);
$this->template->setFile(__DIR__ . DIRECTORY_SEPARATOR . $this->templateName);
$this->template->render();
$this->cacheRepository->updateKey($this->getCacheKey($segment), $result->sum / count($userIds));
}

private function isWidgetUsable($segment): bool
{
return $segment->table_name === 'users';
}

private function getCacheKey($segment): string
{
return sprintf('segment_%s_avg_products_payment', $segment->id);
}
}
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
<li class="list-group-item"><b>{_products.admin.component.avg_product_payment_widget.avg_product_payment}:</b> {$avgProductPayments|number:2}</li>
<li class="list-group-item"><b>{_products.admin.component.avg_product_payment_widget.avg_product_payment}:</b> {$avgProductPayments|number:2}
{if $updatedAt}
<span class="text-muted">({$updatedAt|userDate})</span>
{/if}
</li>
4 changes: 2 additions & 2 deletions src/Models/User/OrdersUserDataProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ public static function identifier(): string
return 'orders';
}

public function data($userId)
public function data($userId): ?array
{
return [];
return null;
}

public function download($userId)
Expand Down
139 changes: 135 additions & 4 deletions src/Presenters/DashboardPresenter.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ public function createComponentGoogleProductsStatsGraph(GoogleBarGraphGroupContr
->setEnd($this->dateTo));

$control = $factory->create();
$control->setGraphTitle($this->translator->translate('dashboard.shop.products.title'))
->setGraphHelp($this->translator->translate('dashboard.shop.products.tooltip'))
$control->setGraphTitle($this->translator->translate('products.admin.dashboard.products.title'))
->setGraphHelp($this->translator->translate('products.admin.dashboard.products.tooltip'))
->addGraphDataItem($graphDataItem);

return $control;
Expand All @@ -100,8 +100,139 @@ public function createComponentGoogleProductTagsStatsGraph(GoogleBarGraphGroupCo
->setEnd($this->dateTo));

$control = $factory->create();
$control->setGraphTitle($this->translator->translate('dashboard.shop.product_tags.title'))
->setGraphHelp($this->translator->translate('dashboard.shop.product_tags.tooltip'))
$control->setGraphTitle($this->translator->translate('products.admin.dashboard.product_tags.title'))
->setGraphHelp($this->translator->translate('products.admin.dashboard.product_tags.tooltip'))
->addGraphDataItem($graphDataItem);

return $control;
}

public function createComponentGoogleOrdersCountGraph(GoogleBarGraphGroupControlFactoryInterface $factory)
{
$this->getSession()->close();
$graphDataItem = new GraphDataItem();
$graphDataItem->setCriteria((new Criteria())
->setTableName('orders')
->setJoin(
"INNER JOIN payments ON payments.id = orders.payment_id AND payments.status = 'paid'"
)
->setTimeField('created_at')
->setValueField('COUNT(orders.id)')
->setStart($this->dateFrom)
->setEnd($this->dateTo));
$graphDataItem->setName($this->translator->translate('products.admin.dashboard.orders_count.title'));

$control = $factory->create();
$control->setGraphTitle($this->translator->translate('products.admin.dashboard.orders_count.title'))
->setGraphHelp($this->translator->translate('products.admin.dashboard.orders_count.tooltip'))
->addGraphDataItem($graphDataItem);

return $control;
}

public function createComponentGoogleProductsPaidSumGraph(GoogleBarGraphGroupControlFactoryInterface $factory)
{
$this->getSession()->close();
$graphDataItem = new GraphDataItem();
$graphDataItem->setCriteria((new Criteria())
->setTableName('payments')
->setTimeField('paid_at')
->setWhere("AND payments.status = 'paid'")
->setJoin(
"INNER JOIN payment_items ON payments.id = payment_items.payment_id AND payment_items.type = '" . ProductPaymentItem::TYPE . "'"
)
->setValueField('SUM(payment_items.count * payment_items.amount)')
->setStart($this->dateFrom)
->setEnd($this->dateTo));
$graphDataItem->setName($this->translator->translate('products.admin.dashboard.products_paid_sum.title'));

$control = $factory->create();
$control->setGraphTitle($this->translator->translate('products.admin.dashboard.products_paid_sum.title'))
->setGraphHelp($this->translator->translate('products.admin.dashboard.products_paid_sum.tooltip'))
->addGraphDataItem($graphDataItem);

return $control;
}

public function createComponentGoogleProductsAveragePaidSumGraph(GoogleBarGraphGroupControlFactoryInterface $factory)
{
$this->getSession()->close();
$graphDataItem = new GraphDataItem();
$graphDataItem->setCriteria((new Criteria())
->setTableName('payments')
->setTimeField('paid_at')
->setJoin(
"INNER JOIN (
SELECT payments.id, SUM(payment_items.count * payment_items.amount) as sum FROM payments
INNER JOIN payment_items ON payments.id = payment_items.payment_id AND payment_items.type = '" . ProductPaymentItem::TYPE . "'
WHERE status = 'paid'
GROUP BY payments.id
) products_paid_amounts ON products_paid_amounts.id = payments.id"
)
->setValueField('AVG(products_paid_amounts.sum)')
->setStart($this->dateFrom)
->setEnd($this->dateTo));
$graphDataItem->setName($this->translator->translate('products.admin.dashboard.products_average_paid_sum.title'));

$control = $factory->create();
$control->setGraphTitle($this->translator->translate('products.admin.dashboard.products_average_paid_sum.title'))
->setGraphHelp($this->translator->translate('products.admin.dashboard.products_average_paid_sum.tooltip'))
->addGraphDataItem($graphDataItem);

return $control;
}

public function createComponentGoogleAverageProductsCountGraph(GoogleBarGraphGroupControlFactoryInterface $factory)
{
$this->getSession()->close();
$graphDataItem = new GraphDataItem();
$graphDataItem->setCriteria((new Criteria())
->setTableName('payments')
->setTimeField('paid_at')
->setJoin(
"INNER JOIN (
SELECT payments.id, SUM(payment_items.count) as sum FROM payments
INNER JOIN payment_items ON payments.id = payment_items.payment_id AND payment_items.type = '" . ProductPaymentItem::TYPE . "'
WHERE status = 'paid'
GROUP BY payments.id
) products_count ON products_count.id = payments.id"
)
->setValueField('AVG(products_count.sum)')
->setStart($this->dateFrom)
->setEnd($this->dateTo));
$graphDataItem->setName($this->translator->translate('products.admin.dashboard.products_average_count.title'));

$control = $factory->create();
$control->setGraphTitle($this->translator->translate('products.admin.dashboard.products_average_count.title'))
->setGraphHelp($this->translator->translate('products.admin.dashboard.products_average_count.tooltip'))
->addGraphDataItem($graphDataItem);

return $control;
}

public function createComponentGoogleAverageVariousProductsCountGraph(GoogleBarGraphGroupControlFactoryInterface $factory)
{
$this->getSession()->close();
$graphDataItem = new GraphDataItem();
$graphDataItem->setCriteria((new Criteria())
->setTableName('payments')
->setTimeField('paid_at')
->setJoin(
"INNER JOIN (
SELECT payments.id, COUNT(payment_items.id) as count FROM payments
INNER JOIN payment_items ON payments.id = payment_items.payment_id AND payment_items.type = '" . ProductPaymentItem::TYPE . "'
WHERE status = 'paid'
GROUP BY payments.id
) products_various_count ON products_various_count.id = payments.id"
)
->setValueField('AVG(products_various_count.count)')
->setStart($this->dateFrom)
->setEnd($this->dateTo));
$graphDataItem->setName($this->translator->translate('products.admin.dashboard.products_various_average_count.title'));

$control = $factory->create();
$control->setGraphTitle($this->translator->translate('products.admin.dashboard.products_various_average_count.title'))
->setGraphHelp($this->translator->translate('products.admin.dashboard.products_various_average_count.tooltip'))
->addGraphDataItem($graphDataItem);

return $control;
Expand Down
21 changes: 21 additions & 0 deletions src/lang/products.cs_CZ.yml
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,27 @@ admin:

dashboard:
title: Štatistiky obchodu
products:
title: Produkty
tooltip: Počet prodaných produktů
product_tags:
title: Tagy
tooltip: Počet prodaných produktů pro jednotlivé tagy
orders_count:
title: Počet objednávek
tooltip: Počet vytvořených objednávek
products_paid_sum:
title: Zaplacená částka
tooltip: Částka zaplacená za produkty
products_average_paid_sum:
title: Průměrná částka objednávky
tooltip: Průměrná částka platby za produkty
products_average_count:
title: Průměrný počet kusů produktů na jednu objednávku
tooltip: Např. objednané 3ks z jednoho produktu se počítá jako 3
products_various_average_count:
title: Průměrný počet různých produktů na jednu objednávku
tooltip: Např. objednané 3ks z jednoho produktu se počítá jako 1

scenarios:
actual_order_status:
Expand Down
21 changes: 21 additions & 0 deletions src/lang/products.en_US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -307,6 +307,27 @@ admin:

dashboard:
title: Shop stats
products:
title: Products
tooltip: Number of sold products
product_tags:
title: Tagy
tooltip: The number of products sold for each tag
orders_count:
title: Number of orders
tooltip: Number of created orders
products_paid_sum:
title: Amount paid
tooltip: Amount paid for products
products_average_paid_sum:
title: Average order amount
tooltip: Average amount of payment for products
products_average_count:
title: Average number of products per order
tooltip: E.g. 3pcs of one product counts as 3
products_various_average_count:
title: Average number of various products per order
tooltip: E.g. 3pcs of one product counts as 1

scenarios:
actual_order_status:
Expand Down
21 changes: 21 additions & 0 deletions src/lang/products.sk_SK.yml
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,27 @@ admin:

dashboard:
title: Štatistiky obchodu
products:
title: Produkty
tooltip: Počet predaných produktov
product_tags:
title: Tagy
tooltip: Počet predaných produktov pre jednotlivé tagy
orders_count:
title: Počet objednávok
tooltip: Počet vytvorených objednávok
products_paid_sum:
title: Zaplatená suma
tooltip: Suma zaplatená za produkty
products_average_paid_sum:
title: Priemerná suma objednávky
tooltip: Priemerná suma platby za produkty
products_average_count:
title: Priemerný počet kusov produktov na jednu objednávku
tooltip: Napr. objednané 3ks z jedného produktu sa ráta ako 3
products_various_average_count:
title: Priemerný počet rôznych produktov na jednu objednávku
tooltip: Napr. objednané 3ks z jedného produktu sa ráta ako 1

scenarios:
actual_order_status:
Expand Down
32 changes: 32 additions & 0 deletions src/templates/Dashboard/default.latte
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,38 @@
</div>
</div>

<div class="row">
<div class="col-md-12">
{control googleOrdersCountGraph}
</div>
</div>

<div class="row">
<div class="col-md-12">
{control googleProductsPaidSumGraph}
</div>
</div>

<div class="row">
<div class="col-md-12">
{control googleProductsAveragePaidSumGraph}
</div>
</div>

<div class="row">
<div class="col-md-12">
{control googleAverageProductsCountGraph}
</div>
</div>

<div class="row">
<div class="col-md-12">
{control googleAverageVariousProductsCountGraph}
</div>
</div>



<hr>

<div class="row text-center">
Expand Down
Loading

0 comments on commit 53db6d9

Please sign in to comment.