Skip to content
Code-Schnipsel Gruppen Projekte
Commit 235d69e4 erstellt von Henning Leutz's avatar Henning Leutz :martial_arts_uniform:
Dateien durchsuchen

Merge branch 'dev' into 'next'

fix(CouponCodeInput): mobile buttons adjusted

See merge request !7
Übergeordnete d459ecec 8c399aa2
No related branches found
No related tags found
2 Merge Requests!8fix(CouponCodeInput): mobile buttons adjusted,!7fix(CouponCodeInput): mobile buttons adjusted
Pipeline #7269 bestanden mit Phase
in 8 Sekunden
werden angezeigt mit 233 Ergänzungen und 158 Löschungen
tools/
phpstan.neon
.phpunit.result.cache
phpunit.xml
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<phive xmlns="https://phar.io/phive">
<phar name="phpstan" version="^1.10.67" installed="1.10.67" location="./tools/phpstan" copy="false"/>
</phive>
......@@ -10,6 +10,7 @@
use QUI\ERP\Coupons\CouponCodeException;
use QUI\ERP\Coupons\Handler;
use QUI\ERP\Discount\Handler as DiscountsHandler;
use QUI\Translator;
use QUI\Utils\Security\Orthos;
QUI::$Ajax->registerFunction(
......@@ -27,7 +28,6 @@ function ($attributes) {
try {
$amount = 1;
$couponCodes = [];
if (!empty($attributes['amount'])) {
$amount = (int)$attributes['amount'];
......@@ -49,14 +49,10 @@ function ($attributes) {
}
// Create discount
switch ($attributes['discountType']) {
case 'percentage':
$discountType = DiscountsHandler::DISCOUNT_TYPE_PERCENT;
break;
default:
$discountType = DiscountsHandler::DISCOUNT_TYPE_CURRENCY;
}
$discountType = match ($attributes['discountType']) {
'percentage' => DiscountsHandler::DISCOUNT_TYPE_PERCENT,
default => DiscountsHandler::DISCOUNT_TYPE_CURRENCY,
};
$Discounts = DiscountsHandler::getInstance();
$NewDiscount = $Discounts->createChild([
......@@ -71,7 +67,7 @@ function ($attributes) {
$NewCouponCode = Handler::createCouponCode([$NewDiscount->getId()], $attributes);
if ($i === 0) {
\QUI\Translator::update(
Translator::update(
'quiqqer/discount',
'discount.' . $NewDiscount->getId() . '.title',
'quiqqer/discount',
......@@ -85,10 +81,8 @@ function ($attributes) {
]
);
\QUI\Translator::publish('quiqqer/discount');
Translator::publish('quiqqer/discount');
}
$couponCodes[] = $NewCouponCode;
}
} catch (CouponCodeException $Exception) {
QUI::getMessagesHandler()->addError(
......@@ -104,7 +98,7 @@ function ($attributes) {
return false;
} catch (QUI\Permissions\Exception $Exception) {
throw $Exception;
} catch (\Exception $Exception) {
} catch (Exception $Exception) {
QUI\System\Log::writeException($Exception);
QUI::getMessagesHandler()->addError(
......
......@@ -4,6 +4,7 @@
* This file contains package_quiqqer_coupons_ajax_delete
*/
use QUI\ERP\Coupons\CouponCodeException;
use QUI\ERP\Coupons\Handler;
use QUI\Utils\Security\Orthos;
......@@ -16,14 +17,14 @@
QUI::$Ajax->registerFunction(
'package_quiqqer_coupons_ajax_delete',
function ($ids) {
$ids = Orthos::clearArray(\json_decode($ids, true));
$ids = Orthos::clearArray(json_decode($ids, true));
try {
foreach ($ids as $id) {
$CouponCode = Handler::getCouponCode((int)$id);
$CouponCode->delete();
}
} catch (\QUI\ERP\Coupons\CouponCodeException $Exception) {
} catch (CouponCodeException $Exception) {
QUI::getMessagesHandler()->addError(
QUI::getLocale()->get(
'quiqqer/coupons',
......@@ -37,7 +38,7 @@ function ($ids) {
return false;
} catch (QUI\Permissions\Exception $Exception) {
throw $Exception;
} catch (\Exception $Exception) {
} catch (Exception $Exception) {
QUI\System\Log::writeException($Exception);
QUI::getMessagesHandler()->addError(
......
......@@ -4,6 +4,7 @@
* This file contains package_quiqqer_coupons_ajax_create
*/
use QUI\ERP\Coupons\CouponCodeException;
use QUI\ERP\Coupons\Handler;
use QUI\Utils\Security\Orthos;
......@@ -16,24 +17,24 @@
QUI::$Ajax->registerFunction(
'package_quiqqer_coupons_ajax_edit',
function ($id, $attributes) {
$id = (int)$id;
$attributes = Orthos::clearArray(\json_decode($attributes, true));
$id = (int)$id;
$attributes = Orthos::clearArray(json_decode($attributes, true));
try {
$discountIds = [];
if (!empty($attributes['discountIds'])) {
$discountIds = \explode(',', $attributes['discountIds']);
$discountIds = explode(',', $attributes['discountIds']);
}
$couponCodes[] = Handler::editCouponCode($id, $discountIds, $attributes);
} catch (\QUI\ERP\Coupons\CouponCodeException $Exception) {
Handler::editCouponCode($id, $discountIds, $attributes);
} catch (CouponCodeException $Exception) {
QUI::getMessagesHandler()->addError(
QUI::getLocale()->get(
'quiqqer/coupons',
'message.ajax.edit.error',
[
'id' => $id,
'id' => $id,
'error' => $Exception->getMessage()
]
)
......@@ -42,7 +43,7 @@ function ($id, $attributes) {
return false;
} catch (QUI\Permissions\Exception $Exception) {
throw $Exception;
} catch (\Exception $Exception) {
} catch (Exception $Exception) {
QUI\System\Log::writeException($Exception);
QUI::getMessagesHandler()->addError(
......
......@@ -26,7 +26,7 @@ function ($code, $orderHash) {
QUI::getMessagesHandler()->addError($Exception->getMessage());
return false;
} catch (\Exception $Exception) {
} catch (Exception $Exception) {
QUI\System\Log::writeException($Exception);
QUI::getMessagesHandler()->addError(
......@@ -95,7 +95,7 @@ function ($code, $orderHash) {
$coupons[] = $code;
$coupons = \array_unique($coupons);
$coupons = array_unique($coupons);
$Order->setData('quiqqer-coupons', $coupons);
$Order->update();
......
......@@ -20,7 +20,7 @@
function ($searchParams) {
Permission::hasPermission(Handler::PERMISSION_VIEW);
$searchParams = Orthos::clearArray(\json_decode($searchParams, true));
$searchParams = Orthos::clearArray(json_decode($searchParams, true));
$couponCodes = [];
$Users = QUI::getUsers();
$L = QUI::getLocale();
......@@ -33,7 +33,7 @@ function ($searchParams) {
// User
try {
$User = $Users->get($usage['userId']);
} catch (QUI\Exception $Exception) {
} catch (QUI\Exception) {
continue;
}
......@@ -46,7 +46,7 @@ function ($searchParams) {
$couponCodes[] = $couponCode;
}
} catch (\Exception $Exception) {
} catch (Exception $Exception) {
QUI\System\Log::writeException($Exception);
QUI::getMessagesHandler()->addError(
......
{
"name": "quiqqer\/coupons",
"name": "quiqqer/coupons",
"type": "quiqqer-module",
"description": "Coupons for QUIQQER",
"license": "GPL-3.0+",
......@@ -7,7 +7,7 @@
{
"name": "Patrick M\u00fcller",
"email": "support@pcsg.de",
"homepage": "https:\/\/www.pcsg.de",
"homepage": "https://www.pcsg.de",
"role": "Developer"
}
],
......@@ -15,13 +15,14 @@
"email": "support@pcsg.de"
},
"require": {
"quiqqer\/quiqqer": "^1.2|*@dev",
"quiqqer\/discount": "^1.1|*@dev",
"quiqqer/products": "^1.3|*@dev"
"quiqqer/core": "^2",
"quiqqer/erp": "^3.2",
"quiqqer/discount": "^2",
"quiqqer/products": "^2"
},
"autoload": {
"psr-4": {
"QUI\\ERP\\Coupons\\": "src\/QUI\/ERP\/Coupons"
"QUI\\ERP\\Coupons\\": "src/QUI/ERP/Coupons"
}
}
}
includes:
- phpstan-baseline.neon
parameters:
level: 1
paths:
- src
- ajax
bootstrapFiles:
- tests/phpstan-bootstrap.php
\ No newline at end of file
......@@ -15,5 +15,5 @@ interface CodeGeneratorInterface
* @param string $prefix (optional)
* @return string
*/
public static function generate($prefix = '');
public static function generate(string $prefix = ''): string;
}
......@@ -6,6 +6,7 @@
namespace QUI\ERP\Coupons\CodeGenerators;
use Exception;
use QUI\ERP\Coupons\CodeGeneratorInterface;
use QUI\ERP\Coupons\Handler;
......@@ -27,9 +28,9 @@ class SimpleString implements CodeGeneratorInterface
*
* @param string $prefix (optional)
* @return string
* @throws \Exception
* @throws Exception
*/
public static function generate($prefix = ''): string
public static function generate(string $prefix = ''): string
{
$characters = array_merge(
range('A', 'Z'),
......
......@@ -13,7 +13,7 @@ class Uuid implements CodeGeneratorInterface
* @param string $prefix (optional)
* @return string
*/
public static function generate($prefix = ''): string
public static function generate(string $prefix = ''): string
{
return $prefix . UuidCreator::uuid1()->toString();
}
......
......@@ -6,7 +6,10 @@
use Exception;
use QUI;
use QUI\ERP\Discount\Handler as DiscountHandler;
use QUI\ERP\Order\AbstractOrder;
use QUI\ERP\Order\OrderInterface;
use QUI\ExceptionStack;
use QUI\Interfaces\Users\User;
use QUI\Permissions\Permission;
use function array_key_first;
......@@ -15,6 +18,7 @@
use function in_array;
use function is_array;
use function is_null;
use function is_numeric;
use function json_decode;
use function json_encode;
use function method_exists;
......@@ -36,35 +40,35 @@ class CouponCode
*
* @var string
*/
protected $code;
protected mixed $code;
/**
* IDs of users that this CouponCode is restricted to
*
* @var int[]
*/
protected $userIds = [];
protected mixed $userIds = [];
/**
* IDs of groups that this CouponCode is restricted to
*
* @var int[]
*/
protected $groupIds = [];
protected mixed $groupIds = [];
/**
* IDs of all linked discounts
*
* @var int[]
* @var array
*/
protected $discountIds = [];
protected array $discountIds = [];
/**
* List of usages of this CouponCode
*
* @var array
*/
protected $usages = [];
protected mixed $usages = [];
/**
* Creation Date
......@@ -83,9 +87,9 @@ class CouponCode
/**
* CouponCode title
*
* @var string
* @var string|null
*/
protected $title = null;
protected ?string $title = null;
/**
* Flag - Is the CouponCode valid?
......@@ -99,7 +103,7 @@ class CouponCode
*
* @var string
*/
protected $maxUsages = Handler::MAX_USAGE_ONCE_PER_USER;
protected string $maxUsages = Handler::MAX_USAGE_ONCE_PER_USER;
/**
* CouponCode constructor.
......@@ -118,7 +122,7 @@ public function __construct(int $id)
'id' => $id
]
]);
} catch (QUI\DataBase\Exception $Exception) {
} catch (QUI\Database\Exception $Exception) {
QUI\System\Log::addError($Exception->getMessage());
throw new CouponCodeException([
......@@ -154,10 +158,30 @@ public function __construct(int $id)
$this->userIds = json_decode($data['userIds'], true);
}
// migrate user ids
foreach ($this->userIds as $k => $userId) {
if (is_numeric($userId)) {
try {
$this->userIds[$k] = QUI::getUsers()->get($userId)->getUUID();
} catch (QUI\Exception) {
}
}
}
if (!empty($data['groupIds'])) {
$this->groupIds = json_decode($data['groupIds'], true);
}
// migrate user ids
foreach ($this->groupIds as $k => $groupId) {
if (is_numeric($groupId)) {
try {
$this->groupIds[$k] = QUI::getGroups()->get($groupId)->getUUID();
} catch (QUI\Exception) {
}
}
}
if (!empty($data['maxUsages'])) {
$this->maxUsages = $data['maxUsages'];
}
......@@ -219,7 +243,7 @@ public function getValidUntilDate(): ?DateTime
}
/**
* @return string
* @return string|null
*/
public function getTitle(): ?string
{
......@@ -276,13 +300,14 @@ public function getGroupIds(): array
*
* Hint: This may invalidate the code for future use
*
* @param QUI\Interfaces\Users\User $User - The user that redeems the CouponCode [if omitted use Session User]
* @param QUI\ERP\Order\Order|null $Order (optional) - Link redemption to a specific Order
* @param User|null $User - The user that redeems the CouponCode [if omitted use Session User]
* @param AbstractOrder|null $Order (optional) - Link redemption to a specific Order
* @return void
* @throws CouponCodeException
* @throws QUI\Exception
* @throws QUI\Database\Exception
* @throws ExceptionStack
*/
public function redeem(QUI\Interfaces\Users\User $User = null, QUI\ERP\Order\Order $Order = null)
public function redeem(QUI\Interfaces\Users\User $User = null, AbstractOrder $Order = null): void
{
if (is_null($User)) {
$User = QUI::getUserBySession();
......@@ -293,13 +318,13 @@ public function redeem(QUI\Interfaces\Users\User $User = null, QUI\ERP\Order\Ord
$Now = new DateTime();
$usage = [
'userId' => $User->getId(),
'userId' => $User->getUUID(),
'date' => $Now->format('Y-m-d H:i:s'),
'orderPrefixedId' => false
];
if ($Order instanceof QUI\ERP\Order\Order) {
$usage['orderPrefixedId'] = $Order->getPrefixedId();
$usage['orderPrefixedId'] = $Order->getPrefixedNumber();
}
$this->usages[] = $usage;
......@@ -328,7 +353,7 @@ public function redeem(QUI\Interfaces\Users\User $User = null, QUI\ERP\Order\Ord
* @return void
* @throws CouponCodeException - Thrown if not redeemable by the given User
*/
public function checkRedemption(QUI\Interfaces\Users\User $User)
public function checkRedemption(QUI\Interfaces\Users\User $User): void
{
if (!$this->isValid()) {
throw new CouponCodeException([
......@@ -396,7 +421,7 @@ public function checkRedemption(QUI\Interfaces\Users\User $User)
// Restriction to QUIQQER user(s)
if (!empty($this->userIds)) {
if (in_array($User->getId(), $this->userIds)) {
if (in_array($User->getUUID(), $this->userIds)) {
if (
$this->maxUsages !== Handler::MAX_USAGE_UNLIMITED
&& $this->hasUserRedeemed($User)
......@@ -450,7 +475,7 @@ public function checkRedemption(QUI\Interfaces\Users\User $User)
* @param OrderInterface|null $Order
* @throws CouponCodeException
*/
public function checkOrderRedemption(?OrderInterface $Order)
public function checkOrderRedemption(?OrderInterface $Order): void
{
if ($Order === null) {
return;
......@@ -496,7 +521,7 @@ public function checkOrderRedemption(?OrderInterface $Order)
/**
* Check if the given User can redeem this CouponCode
*
* @param QUI\Interfaces\Users\User $User - If omitted, use session user
* @param User|null $User - If omitted, use session user
* @param OrderInterface|null $Order
* @return bool
*/
......@@ -504,7 +529,7 @@ public function isRedeemable(QUI\Interfaces\Users\User $User = null, OrderInterf
{
try {
$this->checkRedemption($User);
} catch (CouponCodeException $Exception) {
} catch (CouponCodeException) {
return false;
}
......@@ -539,7 +564,7 @@ public function isValid(): bool
*/
public function hasUserRedeemed(QUI\Interfaces\Users\User $User): bool
{
$userId = $User->getId();
$userId = $User->getUUID();
foreach ($this->usages as $usage) {
if ($usage['userId'] === $userId) {
......@@ -556,7 +581,7 @@ public function hasUserRedeemed(QUI\Interfaces\Users\User $User): bool
* @return void
* @throws QUI\Permissions\Exception
*/
public function delete()
public function delete(): void
{
Permission::checkPermission(Handler::PERMISSION_DELETE);
......@@ -565,11 +590,11 @@ public function delete()
Handler::getTable(),
['id' => $this->id]
);
} catch (QUI\DataBase\Exception $Exception) {
} catch (QUI\Database\Exception $Exception) {
QUI\System\Log::addError($Exception->getMessage());
}
// If hidden discount are connected to this coupon -> delete them aswell
// If hidden discount are connected to this coupon -> delete them as well
foreach ($this->getDiscounts() as $Discount) {
if (!empty($Discount->getAttribute('hidden'))) {
try {
......@@ -616,7 +641,7 @@ public function toArray(): array
*
* @return void
*/
protected function checkValidity()
protected function checkValidity(): void
{
// Check if the expiration date has been reached
if (!empty($this->ValidUntilDate)) {
......@@ -665,7 +690,7 @@ protected function checkValidity()
* @param QUI\ERP\Order\OrderInProcess $Order
* @throws QUI\Exception
*/
public function addToOrder(QUI\ERP\Order\OrderInProcess $Order)
public function addToOrder(QUI\ERP\Order\OrderInProcess $Order): void
{
$coupons = $Order->getDataEntry('quiqqer-coupons');
......@@ -691,7 +716,7 @@ public function addToOrder(QUI\ERP\Order\OrderInProcess $Order)
/* @var $Coupon CouponCode */
try {
$Coupon = Handler::getCouponCodeByCode($coupon);
} catch (Exception $Exception) {
} catch (Exception) {
continue;
}
......@@ -721,7 +746,7 @@ public function addToOrder(QUI\ERP\Order\OrderInProcess $Order)
// @todo wenn fest preis (zb 10$), dann eigener produkt typ hinzufügen
$articles[] = new QUI\ERP\Accounting\Articles\Text([
'id' => '-',
'id' => -1,
'articleNo' => $Coupon->getCode(),
'title' => $PriceFactor->getTitle(),
'description' => '',
......
......@@ -13,10 +13,9 @@
use QUI\ERP\Discount\EventHandling as DiscountEvents;
use QUI\ERP\Order\AbstractOrder;
use QUI\ERP\Order\Basket\Basket;
use QUI\ERP\Order\Basket\BasketGuest;
use QUI\ERP\Products\Handler\Fields;
use QUI\ERP\Products\Interfaces\ProductInterface;
use Quiqqer\Engine\Collector;
use QUI\Smarty\Collector;
use function array_merge;
use function array_search;
......@@ -40,7 +39,7 @@ class Events
* @param QUI\Package\Package $Package
* @return void
*/
public static function onPackageSetup(QUI\Package\Package $Package)
public static function onPackageSetup(QUI\Package\Package $Package): void
{
try {
self::createProductFields();
......@@ -52,7 +51,7 @@ public static function onPackageSetup(QUI\Package\Package $Package)
/**
* event : on admin load footer
*/
public static function onAdminLoadFooter()
public static function onAdminLoadFooter(): void
{
echo '<script src="' . URL_OPT_DIR . 'quiqqer/coupons/bin/backend/load.js"></script>';
}
......@@ -61,11 +60,14 @@ public static function onAdminLoadFooter()
* Template event quiqqer/order: onQuiqqer::order::orderProcessBasketEnd
*
* @param Collector $Collector
* @param BasketGuest $Basket
* @param $Order
* @param mixed $Basket
* @param AbstractOrder|null $Order
*/
public static function templateOrderProcessBasketEnd(Collector $Collector, $Basket, $Order)
{
public static function templateOrderProcessBasketEnd(
Collector $Collector,
mixed $Basket,
AbstractOrder $Order = null
): void {
if (
!($Basket instanceof Basket)
&& !($Basket instanceof QUI\ERP\Order\Basket\BasketOrder)
......@@ -79,8 +81,11 @@ public static function templateOrderProcessBasketEnd(Collector $Collector, $Bask
$CouponCode = Handler::getCouponCodeByCode($code);
$CouponCode->checkRedemption(QUI::getUserBySession());
$CouponCode->addToOrder($Order);
} catch (Exception $Exception) {
if ($Order instanceof QUI\ERP\Order\OrderInProcess) {
$CouponCode->addToOrder($Order);
}
} catch (Exception) {
}
}
......@@ -94,7 +99,7 @@ public static function templateOrderProcessBasketEnd(Collector $Collector, $Bask
* @throws QUI\ERP\Order\Exception
* @throws QUI\Exception
*/
public static function onOrderProcess(QUI\ERP\Order\OrderProcess $OrderProcess)
public static function onOrderProcess(QUI\ERP\Order\OrderProcess $OrderProcess): void
{
$CurrentStep = $OrderProcess->getCurrentStep();
$currentStep = $CurrentStep->getType();
......@@ -137,17 +142,17 @@ public static function onOrderProcess(QUI\ERP\Order\OrderProcess $OrderProcess)
public static function onQuiqqerOrderBasketRemovePos(
QUI\ERP\Order\Basket\Basket $Basket,
$pos
) {
): void {
$Order = null;
try {
$Order = $Basket->getOrder();
} catch (QUI\Exception $Exception) {
} catch (QUI\Exception) {
$Orders = QUI\ERP\Order\Handler::getInstance();
try {
$Order = $Orders->getLastOrderInProcessFromUser(QUI::getUserBySession());
} catch (QUI\Exception $Exception) {
} catch (QUI\Exception) {
}
}
......@@ -177,7 +182,7 @@ public static function onQuiqqerOrderBasketRemovePos(
return;
}
// custom data has code params, so article is an coupon code
// custom data has code params, so article is a coupon code
// we need to delete it
if (in_array($articleCouponCode, $orderCoupons)) {
$pos = array_search($articleCouponCode, $orderCoupons);
......@@ -187,7 +192,7 @@ public static function onQuiqqerOrderBasketRemovePos(
try {
$Order->save();
} catch (QUI\Exception $Exception) {
} catch (QUI\Exception) {
}
}
......@@ -227,15 +232,16 @@ public static function onQuiqqerOrderBasketRemovePos(
/**
* event - on price factor init
*
* @param $Basket
* @param mixed $Basket
* @param QUI\ERP\Order\AbstractOrder $Order
* @param QUI\ERP\Products\Product\ProductList $Products
* @throws QUI\Exception
*/
public static function onQuiqqerOrderBasketToOrder(
$Basket,
mixed $Basket,
QUI\ERP\Order\AbstractOrder $Order,
QUI\ERP\Products\Product\ProductList $Products
) {
): void {
$coupons = $Order->getDataEntry('quiqqer-coupons');
$sessionCoupons = QUI::getSession()->get('quiqqer-coupons');
......@@ -264,7 +270,7 @@ public static function onQuiqqerOrderBasketToOrder(
$productCount = $Products->count();
$subSum = $products['calculations']['subSum'];
$checkRedeemable = !$Order->isSuccessful(); // if order is successful we dont need a check
$checkRedeemable = !$Order->isSuccessful(); // if order is successful we don't need a check
$OrderInProcess = $Order->getAttribute('OrderInProcess');
$added = false;
......@@ -283,7 +289,7 @@ public static function onQuiqqerOrderBasketToOrder(
/* @var $Coupon CouponCode */
try {
$Coupon = Handler::getCouponCodeByCode($coupon);
} catch (Exception $Exception) {
} catch (Exception) {
continue;
}
......@@ -302,7 +308,7 @@ public static function onQuiqqerOrderBasketToOrder(
if ($Discount->getAttribute('scope') === QUI\ERP\Discount\Handler::DISCOUNT_SCOPE_GRAND_TOTAL) {
// do nothing for this scope
// since this scope requires all price factors etc, this cannot be calculated here
// since this scope requires all price factors etc., this cannot be calculated here
} elseif (!DiscountEvents::isDiscountUsableWithPurchaseValue($Discount, $subSum)) {
continue;
}
......@@ -361,10 +367,10 @@ public static function onQuiqqerOrderBasketToOrder(
*
* Redeem coupons used in (completed) orders
*
* @param QUI\ERP\Order\Order|QUI\ERP\Order\OrderInProcess $Order
* @param AbstractOrder $Order
* @return void
*/
public static function onQuiqqerOrderSuccessful($Order)
public static function onQuiqqerOrderSuccessful(AbstractOrder $Order): void
{
$coupons = $Order->getDataEntry('quiqqer-coupons');
......@@ -386,7 +392,7 @@ public static function onQuiqqerOrderSuccessful($Order)
* @param $Order
* @param $coupons
*/
protected static function addSessionCouponsToOrder($Order, $coupons)
protected static function addSessionCouponsToOrder($Order, $coupons): void
{
if (!is_array($coupons)) {
return;
......@@ -417,7 +423,7 @@ protected static function addSessionCouponsToOrder($Order, $coupons)
* @param $Order
* @param $coupon
*/
protected static function addCouponToOrder($Order, $coupon)
protected static function addCouponToOrder($Order, $coupon): void
{
if (!($Order instanceof QUI\ERP\Order\OrderInProcess)) {
return;
......@@ -439,7 +445,7 @@ protected static function addCouponToOrder($Order, $coupon)
$Order->update();
$CouponCode->addToOrder($Order);
} catch (Exception $Exception) {
} catch (Exception) {
}
}
......@@ -448,7 +454,7 @@ protected static function addCouponToOrder($Order, $coupon)
*
* @return void
*/
public static function removeCouponsFromSession()
public static function removeCouponsFromSession(): void
{
QUI::getSession()->remove('quiqqer-coupons');
}
......@@ -459,7 +465,7 @@ public static function removeCouponsFromSession()
* @return void
* @throws QUI\Exception
*/
protected static function createProductFields()
protected static function createProductFields(): void
{
$fields = [
CouponProductsHandler::PRODUCT_FIELD_ID_TRANSFERABLE => [
......@@ -627,7 +633,7 @@ protected static function createProductFields()
try {
Fields::getField($fieldId);
continue;
} catch (Exception $Exception) {
} catch (Exception) {
// Field does not exist -> create it
}
......@@ -665,7 +671,7 @@ protected static function createProductFields()
*
* @throws QUI\Exception
*/
public static function onQuiqqerProductsProductCreate(ProductInterface $Product)
public static function onQuiqqerProductsProductCreate(ProductInterface $Product): void
{
if (!($Product instanceof DigitalCouponProductType) && !($Product instanceof PhysicalCouponProductType)) {
return;
......@@ -725,7 +731,7 @@ public static function onQuiqqerProductsProductCreate(ProductInterface $Product)
* @throws CouponProductException
* @throws QUI\Exception
*/
public static function onQuiqqerProductsProductActivate(ProductInterface $Product)
public static function onQuiqqerProductsProductActivate(ProductInterface $Product): void
{
if (!($Product instanceof DigitalCouponProductType) && !($Product instanceof PhysicalCouponProductType)) {
return;
......@@ -766,7 +772,7 @@ public static function onQuiqqerProductsProductActivate(ProductInterface $Produc
* @param AbstractOrder $Order
* @return void
*/
public static function onQuiqqerOrderCreated(AbstractOrder $Order)
public static function onQuiqqerOrderCreated(AbstractOrder $Order): void
{
QUI\ERP\Coupons\Products\Handler::createCouponCodesFromOrder($Order);
}
......
......@@ -181,10 +181,17 @@ public static function createCouponCode(array $discountIds, array $settings = []
$couponCode['groupIds'] = json_encode(explode(",", $settings['groupIds']));
}
QUI::getDataBase()->insert(
self::getTable(),
$couponCode
);
try {
QUI::getDataBase()->insert(
self::getTable(),
$couponCode
);
} catch (QUI\Database\Exception $e) {
throw new CouponCodeException([
$e->getMessage(),
$e->getCode()
]);
}
return self::getCouponCode(QUI::getPDO()->lastInsertId());
}
......@@ -301,9 +308,9 @@ public static function editCouponCode(int $id, array $discountIds, array $settin
* @param array $searchParams
* @param bool $countOnly (optional) - get result count only [default: false]
* @return CouponCode[]|int
* @throws CouponCodeException
* @throws CouponCodeException|QUI\Exception
*/
public static function search(array $searchParams, bool $countOnly = false)
public static function search(array $searchParams, bool $countOnly = false): array|int
{
$couponCodes = [];
$Grid = new Grid($searchParams);
......@@ -333,14 +340,12 @@ public static function search(array $searchParams, bool $countOnly = false)
$whereOr[] = '`' . $searchColumn . '` LIKE :search';
}
if (!empty($whereOr)) {
$where[] = '(' . implode(' OR ', $whereOr) . ')';
$where[] = '(' . implode(' OR ', $whereOr) . ')';
$binds['search'] = [
'value' => '%' . $searchParams['search'] . '%',
'type' => PDO::PARAM_STR
];
}
$binds['search'] = [
'value' => '%' . $searchParams['search'] . '%',
'type' => PDO::PARAM_STR
];
}
// build WHERE query string
......@@ -429,7 +434,7 @@ public static function existsCode(string $code): bool
*
* @return QUI\Projects\Site|false
*/
public static function getRegistrationSite()
public static function getRegistrationSite(): bool|QUI\Projects\Site
{
try {
$Conf = QUI::getPackage('quiqqer/coupons')->getConfig();
......@@ -446,7 +451,7 @@ public static function getRegistrationSite()
try {
return QUI\Projects\Site\Utils::getSiteByLink($regSite);
} catch (Exception $Exception) {
} catch (Exception) {
return false;
}
}
......@@ -459,7 +464,7 @@ public static function getRegistrationSite()
*
* @throws Exception
*/
public static function deleteExpiredCouponCodes(int $days = null)
public static function deleteExpiredCouponCodes(int $days = null): void
{
$Now = new DateTime();
$where = [
......@@ -493,7 +498,7 @@ public static function deleteExpiredCouponCodes(int $days = null)
*
* @throws Exception
*/
public static function deleteRedeemedCouponCodes(int $days = null)
public static function deleteRedeemedCouponCodes(int $days = null): void
{
$where = [
'useDate' => [
......
......@@ -21,7 +21,7 @@ class DigitalCouponProductType extends DigitalProduct
* @throws QUI\ERP\Products\Product\Exception
* @throws QUI\Exception
*/
public function __construct($pid, $product = [])
public function __construct(int $pid, array $product = [])
{
parent::__construct($pid, $product);
......@@ -49,10 +49,10 @@ public function __construct($pid, $product = [])
}
/**
* @param QUI\Locale $Locale
* @param QUI\Locale|null $Locale
* @return string
*/
public static function getTypeTitle($Locale = null): string
public static function getTypeTitle(QUI\Locale $Locale = null): string
{
if ($Locale === null) {
$Locale = QUI::getLocale();
......
......@@ -2,6 +2,7 @@
namespace QUI\ERP\Coupons\Products;
use Exception;
use QUI;
use QUI\ERP\Coupons\CouponCode;
use QUI\ERP\Coupons\Handler as CouponsHandler;
......@@ -10,7 +11,18 @@
use QUI\ERP\Discount\Handler as DiscountHandler;
use QUI\ERP\Products\Handler\Products as ProductsHandler;
use QUI\ERP\Products\Product\Product;
use QUI\ExceptionStack;
use QUI\HtmlToPdf\Document;
use QUI\Translator;
use function array_merge;
use function basename;
use function date;
use function date_create;
use function is_numeric;
use function mb_substr;
use function rename;
use function str_replace;
/**
* Class Handler
......@@ -49,7 +61,7 @@ public static function createCouponCodesFromOrder(QUI\ERP\Order\AbstractOrder $O
foreach ($Order->getArticles() as $Article) {
try {
// Do not parse coupon codes / discounts
if (empty($Article->getId()) || !\is_numeric($Article->getId())) {
if (empty($Article->getId()) || !is_numeric($Article->getId())) {
continue;
}
......@@ -99,23 +111,23 @@ public static function createCouponCodesFromOrder(QUI\ERP\Order\AbstractOrder $O
'quiqqer/coupons',
'DownloadProduct.pdf.filename',
[
'productTitle' => \str_replace(' ', '_', $productTitelSanitized),
'date' => \date('Y_m_d')
'productTitle' => str_replace(' ', '_', $productTitelSanitized),
'date' => date('Y_m_d')
]
);
$fileName .= '__' . \mb_substr($Order->getHash(), 0, 6);
$fileName .= '__' . mb_substr($Order->getUUID(), 0, 6);
$newCouponPdfFile = \str_replace(\basename($couponPdfFile, '.pdf'), $fileName, $couponPdfFile);
$newCouponPdfFile = str_replace(basename($couponPdfFile, '.pdf'), $fileName, $couponPdfFile);
\rename($couponPdfFile, $newCouponPdfFile);
rename($couponPdfFile, $newCouponPdfFile);
// Add PDF file to customer files
CustomerFiles::addFileToCustomer($Customer->getId(), $newCouponPdfFile);
CustomerFiles::addFileToDownloadEntry($Customer->getId(), \basename($newCouponPdfFile));
CustomerFiles::addFileToCustomer($Customer->getUUID(), $newCouponPdfFile);
CustomerFiles::addFileToDownloadEntry($Customer->getUUID(), basename($newCouponPdfFile));
$customerDir = CustomerFiles::getFolderPath($Customer);
$couponFilePathCustomerDir = $customerDir . DIRECTORY_SEPARATOR . \basename($newCouponPdfFile);
$couponFilePathCustomerDir = $customerDir . DIRECTORY_SEPARATOR . basename($newCouponPdfFile);
}
// Send coupon via email
......@@ -128,16 +140,10 @@ public static function createCouponCodesFromOrder(QUI\ERP\Order\AbstractOrder $O
);
if ($deliveryTypeFieldData) {
switch ($deliveryTypeFieldData['value']) {
// by mail
case 1:
$sendMail = false;
break;
// by email
default:
$sendMail = true;
}
$sendMail = match ($deliveryTypeFieldData['value']) {
1 => false,
default => true,
};
} else {
$sendMail = $Product->getFieldValue(self::PRODUCT_FIELD_ID_SEND_MAIL);
}
......@@ -156,7 +162,7 @@ public static function createCouponCodesFromOrder(QUI\ERP\Order\AbstractOrder $O
)
);
}
} catch (\Exception $Exception) {
} catch (Exception $Exception) {
if ($Exception->getCode() === 404) {
QUI\System\Log::writeDebugException($Exception);
} else {
......@@ -175,7 +181,7 @@ public static function createCouponCodesFromOrder(QUI\ERP\Order\AbstractOrder $O
* @return CouponCode
*
* @throws QUI\Exception
* @throws \Exception
* @throws Exception
*/
protected static function createCouponCodeFromProduct(
Product $Product,
......@@ -188,7 +194,7 @@ protected static function createCouponCodeFromProduct(
'quiqqer/coupons',
'ProductCoupon.coupon_title',
[
'orderId' => $Order->getPrefixedId(),
'orderId' => $Order->getPrefixedNumber(),
'productId' => $Product->getId()
]
),
......@@ -202,7 +208,7 @@ protected static function createCouponCodeFromProduct(
$daysValid = 1095; // 3 years;
}
$ValidUntil = \date_create('+ ' . $daysValid . ' days');
$ValidUntil = date_create('+ ' . $daysValid . ' days');
$couponAttributes['validUntilDate'] = $ValidUntil->format('Y-m-d');
// Transferable (=usable by other users or guests)
......@@ -210,7 +216,7 @@ protected static function createCouponCodeFromProduct(
$isTransferable = $Product->getFieldValue(self::PRODUCT_FIELD_ID_TRANSFERABLE);
if (empty($isTransferable)) {
$couponAttributes['userIds'] = [$User->getId()];
$couponAttributes['userIds'] = [$User->getUUID()];
}
}
......@@ -263,14 +269,14 @@ protected static function createDiscountFromProduct(Product $Product): Discount
]);
}
\QUI\Translator::update(
Translator::update(
'quiqqer/discount',
'discount.' . $NewDiscount->getId() . '.title',
'quiqqer/discount',
$discountTitle
);
\QUI\Translator::publish('quiqqer/discount');
Translator::publish('quiqqer/discount');
return $NewDiscount;
}
......@@ -279,6 +285,7 @@ protected static function createDiscountFromProduct(Product $Product): Discount
* @param CouponCode $CouponCode - The coupon code
* @param Product $Product - The product the coupon code was created from
* @return string - PDF file path
* @throws QUI\Exception
*/
public static function createCouponCodePdf(CouponCode $CouponCode, Product $Product): string
{
......@@ -296,7 +303,7 @@ public static function createCouponCodePdf(CouponCode $CouponCode, Product $Prod
$Engine = QUI::getTemplateManager()->getEngine();
$Engine->assign(
\array_merge(
array_merge(
[
'CouponCode' => $CouponCode,
'Product' => $Product->getViewFrontend(),
......@@ -311,7 +318,7 @@ public static function createCouponCodePdf(CouponCode $CouponCode, Product $Prod
$Document->setHeaderHTML($Engine->fetch($tplDir . 'CouponCode.header.html'));
$Document->setContentHTML($Engine->fetch($tplDir . 'CouponCode.body.html'));
$Document->setFooterHTML($Engine->fetch($tplDir . 'CouponCode.footer.html'));
} catch (\Exception $Exception) {
} catch (Exception $Exception) {
QUI\System\Log::writeException($Exception);
}
......@@ -326,19 +333,19 @@ public static function createCouponCodePdf(CouponCode $CouponCode, Product $Prod
* @param QUI\Interfaces\Users\User $Customer
* @param string|null $couponPdfFile (optional) - Coupon PDF that is attached to the email
*
* @throws \Exception
* @throws Exception
*/
public static function sendCouponMail(
CouponCode $CouponCode,
Product $Product,
QUI\Interfaces\Users\User $Customer,
?string $couponPdfFile
) {
): void {
$recipient = QUI\ERP\Customer\Utils::getInstance()->getEmailByCustomer($Customer);
if (empty($recipient)) {
QUI\System\Log::addWarning(
'Cannot send coupon code e-mail to customer #' . $Customer->getUniqueId() . ' because user has no'
'Cannot send coupon code e-mail to customer #' . $Customer->getUUID() . ' because user has no'
. ' email address!'
);
......@@ -378,7 +385,7 @@ public static function sendCouponMail(
QUI::getLocale()->get(
'quiqqer/coupons',
'ProductCoupon.mail.body',
\array_merge(
array_merge(
$couponViewData,
[
'customerName' => $Customer->getName(),
......@@ -400,8 +407,10 @@ public static function sendCouponMail(
* @param Product $Product
* @return array
*
* @throws QUI\Database\Exception
* @throws QUI\ERP\Products\Product\Exception
* @throws QUI\Users\Exception
* @throws QUI\Exception
* @throws ExceptionStack
*/
protected static function getCouponViewData(CouponCode $CouponCode, Product $Product): array
{
......@@ -456,6 +465,7 @@ protected static function getCouponViewData(CouponCode $CouponCode, Product $Pro
* which are NOT taxed at checkout but only when they are redeemed for a product.
*
* @return QUI\ERP\Tax\TaxType[]
* @throws QUI\Exception
*/
public static function getNoVatTaxTypes(): array
{
......
......@@ -20,7 +20,7 @@ class PhysicalCouponProductType extends QUI\ERP\Products\Product\Types\AbstractT
* @throws QUI\ERP\Products\Product\Exception
* @throws QUI\Exception
*/
public function __construct($pid, $product = [])
public function __construct(int $pid, array $product = [])
{
parent::__construct($pid, $product);
......@@ -48,10 +48,10 @@ public function __construct($pid, $product = [])
}
/**
* @param QUI\Locale $Locale
* @param QUI\Locale|null $Locale
* @return string
*/
public static function getTypeTitle($Locale = null): string
public static function getTypeTitle(QUI\Locale $Locale = null): string
{
if ($Locale === null) {
$Locale = QUI::getLocale();
......
<?php
if (!defined('QUIQQER_SYSTEM')) {
define('QUIQQER_SYSTEM', true);
}
if (!defined('QUIQQER_AJAX')) {
define('QUIQQER_AJAX', true);
}
putenv("QUIQQER_OTHER_AUTOLOADERS=KEEP");
require_once __DIR__ . '/../../../../bootstrap.php';
0% oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren