69 lines
2.3 KiB
PHP
69 lines
2.3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace External\HannahBundle\Util;
|
|
|
|
use KupShop\AdminBundle\Util\ActivityLog;
|
|
use KupShop\KupShopBundle\Query\JsonOperator;
|
|
use Query\Operator;
|
|
|
|
readonly class OCAlertUtil
|
|
{
|
|
private const ALERT_LIMIT_DISCOUNT_COUPONS = 50;
|
|
|
|
public function doCheckAlerts(): void
|
|
{
|
|
foreach (get_class_methods($this) as $method) {
|
|
if (!str_starts_with($method, 'alert')) {
|
|
continue;
|
|
}
|
|
|
|
$this->{$method}();
|
|
}
|
|
}
|
|
|
|
protected function alertDiscountCoupons(): void
|
|
{
|
|
$subqueryUsedCoupons = sqlQueryBuilder()
|
|
->select('COUNT(*)')
|
|
->from('discounts_coupons', 'dcu')
|
|
->andWhere('dcu.id_discount = d.id')
|
|
->andWhere(Operator::equals(['dcu.used' => 'Y']));
|
|
|
|
$subqueryProducts = sqlQueryBuilder()
|
|
->select("JSON_VALUE(data, '$.generate_coupon_discount') as id_discount")
|
|
->from('products')
|
|
->andWhere(Operator::equals([JsonOperator::value('data', 'generate_coupon') => 'Y']))
|
|
->andWhere("JSON_VALUE(data, '$.generate_coupon_discount') IS NOT NULL AND JSON_VALUE(data, '$.generate_coupon_discount') != ''");
|
|
|
|
$qb = sqlQueryBuilder()
|
|
->select("d.id, d.descr, COUNT(dc.id) as total, ({$subqueryUsedCoupons}) as used, (COUNT(dc.id) - ({$subqueryUsedCoupons->getSQL()})) as remaining")
|
|
->from('discounts', 'd')
|
|
->joinSubQuery('d', $subqueryProducts, 'p', 'p.id_discount = d.id')
|
|
->join('d', 'discounts_coupons', 'dc', 'dc.id_discount = d.id')
|
|
->groupBy('d.id')
|
|
->having('remaining < '.self::ALERT_LIMIT_DISCOUNT_COUPONS)
|
|
->addQueryBuilderParameters($subqueryUsedCoupons);
|
|
|
|
$activityLogData = [];
|
|
foreach ($qb->execute() as $item) {
|
|
$activityLogData[$item['descr']] = $item['remaining'];
|
|
}
|
|
|
|
if (!empty($activityLogData)) {
|
|
$this->addActivityLog('Zásoby některých dárkových poukazů docházejí: ('.count($activityLogData).')', $activityLogData);
|
|
}
|
|
}
|
|
|
|
private function addActivityLog(string $message, array $data): void
|
|
{
|
|
addActivityLog(
|
|
severity: ActivityLog::SEVERITY_WARNING,
|
|
type: ActivityLog::TYPE_COMMUNICATION,
|
|
message: $message,
|
|
data: $data,
|
|
);
|
|
}
|
|
}
|