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

fix: quiqqer/discount#6

Übergeordneter d41ca92c
No related branches found
No related tags found
Keine zugehörigen Merge Requests gefunden
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
namespace QUI\ERP\Coupons; namespace QUI\ERP\Coupons;
use QUI\ERP\Order\OrderInterface;
use function GuzzleHttp\Promise\queue; use function GuzzleHttp\Promise\queue;
use QUI; use QUI;
use QUI\Permissions\Permission; use QUI\Permissions\Permission;
...@@ -397,13 +398,63 @@ public function checkRedemption($User) ...@@ -397,13 +398,63 @@ public function checkRedemption($User)
} }
} }
/**
* Check if the given Order can redeem this CouponCode
*
* @param OrderInterface|null $Order
* @throws CouponCodeException
*/
public function checkOrderRedemption($Order)
{
if ($Order === null) {
return;
}
$DiscountHandler = DiscountHandler::getInstance();
$discountsValid = false;
$discountError = false;
foreach ($this->discountIds as $discountId) {
try {
/** @var QUI\ERP\Discount\Discount $Discount */
$Discount = $DiscountHandler->getChild($discountId);
} catch (\Exception $Exception) {
$discountError = $Exception->getMessage();
continue;
}
if ($Discount->canUsedInOrder($Order)) {
$discountsValid = true;
break;
}
}
if (!$discountsValid) {
if (\count($this->discountIds) === 1) {
throw new CouponCodeException([
'quiqqer/coupons',
'exception.CouponCode.discount_invalid',
[
'reason' => $discountError
]
]);
} else {
throw new CouponCodeException([
'quiqqer/coupons',
'exception.CouponCode.discounts_invalid'
]);
}
}
}
/** /**
* Check if the given User can redeem this CouponCode * Check if the given User can redeem this CouponCode
* *
* @param QUI\Users\User $User - If omitted, use session user * @param QUI\Users\User $User - If omitted, use session user
* @param OrderInterface $Order
* @return bool * @return bool
*/ */
public function isRedeemable($User = null) public function isRedeemable($User = null, $Order = null)
{ {
try { try {
$this->checkRedemption($User); $this->checkRedemption($User);
...@@ -411,6 +462,16 @@ public function isRedeemable($User = null) ...@@ -411,6 +462,16 @@ public function isRedeemable($User = null)
return false; return false;
} }
if ($Order) {
try {
$this->checkOrderRedemption($Order);
} catch (CouponCodeException $Exception) {
$Order->addFrontendMessage($Exception->getMessage());
return false;
}
}
return true; return true;
} }
...@@ -576,7 +637,7 @@ public function addToOrder(QUI\ERP\Order\OrderInProcess $Order) ...@@ -576,7 +637,7 @@ public function addToOrder(QUI\ERP\Order\OrderInProcess $Order)
} }
// coupon check // coupon check
if (!$Coupon->isRedeemable($Order->getCustomer())) { if (!$Coupon->isRedeemable($Order->getCustomer(), $Order)) {
continue; continue;
} }
......
...@@ -364,6 +364,7 @@ protected static function addCouponToOrder($Order, $coupon) ...@@ -364,6 +364,7 @@ protected static function addCouponToOrder($Order, $coupon)
$CouponCode = Handler::getCouponCodeByCode($code); $CouponCode = Handler::getCouponCodeByCode($code);
$CouponCode->checkRedemption(QUI::getUserBySession()); $CouponCode->checkRedemption(QUI::getUserBySession());
$CouponCode->checkOrderRedemption($Order);
$coupons = $Order->getDataEntry('quiqqer-coupons'); $coupons = $Order->getDataEntry('quiqqer-coupons');
$coupons[] = $code; $coupons[] = $code;
......
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