Skip to content

Commit

Permalink
Fix voucher redemption (revert to work with voucher adjuster revert)
Browse files Browse the repository at this point in the history
  • Loading branch information
engram-design committed Dec 10, 2021
1 parent 048013a commit 8833587
Showing 1 changed file with 30 additions and 39 deletions.
69 changes: 30 additions & 39 deletions src/services/CodesService.php
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
}
}
}

Expand Down

0 comments on commit 8833587

Please sign in to comment.