diff --git a/src/services/CodesService.php b/src/services/CodesService.php index b9a98fe..864c6f5 100755 --- a/src/services/CodesService.php +++ b/src/services/CodesService.php @@ -3,7 +3,6 @@ use verbb\giftvoucher\GiftVoucher; use verbb\giftvoucher\adjusters\GiftVoucherAdjuster; -use verbb\giftvoucher\adjusters\GiftVoucherShippingAdjuster; use verbb\giftvoucher\elements\Code; use verbb\giftvoucher\elements\Voucher; use verbb\giftvoucher\events\MatchCodeEvent; @@ -83,47 +82,39 @@ public static function handleCompletedOrder(Event $event) $giftVoucherCodes = GiftVoucher::getInstance()->getCodeStorage()->getCodeKeys($order); if ($giftVoucherCodes && count($giftVoucherCodes) > 0) { - $redeemedCodes = []; - foreach ($order->getAdjustments() as $adjustment) { - $isVoucherCode = $adjustment->sourceSnapshot['giftVoucherPluginCode'] ?? null; - $codeKey = $adjustment->sourceSnapshot['codeKey'] ?? null; - - // Check if this is a gift voucher adjustment redemption - if ($isVoucherCode && $codeKey) { - // Accumulate the total amount for the discount, shipping discount + discount. - if ($code = Code::findOne(['codeKey' => $codeKey])) { - $redeemedCodes[$codeKey]['code'] = $code; - - if (isset($redeemedCodes[$codeKey]['amount'])) { - $redeemedCodes[$codeKey]['amount'] += $adjustment->amount; - } else { - $redeemedCodes[$codeKey]['amount'] = $adjustment->amount; - } + if ($adjustment->type === GiftVoucherAdjuster::ADJUSTMENT_TYPE) { + $code = null; + + if (isset($adjustment->sourceSnapshot['codeKey'])) { + $codeKey = $adjustment->sourceSnapshot['codeKey']; + $code = Code::findOne(['codeKey' => $codeKey]); } - } - } - // With the consolidated codes with the correct amount, track redemption for each code - foreach ($redeemedCodes as $codeKey => $redeemedCode) { - $code = $redeemedCode['code']; - $amount = $redeemedCode['amount']; - - $code->currentAmount += $amount; - Craft::$app->getElements()->saveElement($code, false); - - // Track code redemption - $redemption = new RedemptionModel(); - $redemption->codeId = $code->id; - $redemption->orderId = $order->id; - $redemption->amount = (float)$amount * -1; - - if (!GiftVoucher::$plugin->getRedemptions()->saveRedemption($redemption)) { - $error = Craft::t('app', 'Unable to save redemption: “{errors}”.', [ - 'errors' => Json::encode($redemption->getErrors()), - ]); - - GiftVoucher::error($error); + if ($code) { + $code->currentAmount += $adjustment->amount; + Craft::$app->getElements()->saveElement($code, false); + + // Track code redemption + $redemption = new RedemptionModel(); + $redemption->codeId = $code->id; + $redemption->orderId = $order->id; + $redemption->amount = (float)$adjustment->amount * -1; + + if (!GiftVoucher::$plugin->getRedemptions()->saveRedemption($redemption)) { + $error = Craft::t('app', 'Unable to save redemption: “{errors}”.', [ + 'errors' => Json::encode($redemption->getErrors()), + ]); + + GiftVoucher::error($error); + } + } else { + $error = Craft::t('app', 'Unable to find matching code in adjustment snapshot: “{adjustment}”.', [ + 'adjustment' => Json::encode($adjustment), + ]); + + GiftVoucher::error($error); + } } }