Skip to content
Code-Schnipsel Gruppen Projekte

Revisionen vergleichen

Änderungen werden so angezeigt, als ob die Quellrevision mit der Zielrevision zusammengeführt würde. Erfahre mehr über den Vergleich von Revisionen.

Quelle

Zielprojekt auswählen
No results found

Ziel

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