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

refactor: #7

Übergeordneter 8e03aaa1
No related branches found
No related tags found
Keine zugehörigen Merge Requests gefunden
......@@ -6,8 +6,10 @@
*/
define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
'qui/QUI',
'qui/controls/Control',
'qui/controls/loader/Loader',
'utils/Session',
'package/quiqqer/coupons/bin/frontend/CouponCodes',
......@@ -18,7 +20,7 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
'text!package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput.html',
'css!package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput.css'
], function (QUIControl, QUILoader, CouponCodes, QUIAjax, QUILocale, Mustache, template) {
], function (QUI, QUIControl, QUILoader, Sessions, CouponCodes, QUIAjax, QUILocale, Mustache, template) {
"use strict";
var lg = 'quiqqer/coupons';
......@@ -135,10 +137,12 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
return;
}
QUIAjax.get('package_quiqqer_order_ajax_frontend_basket_getOrderProcessUrl', function (url) {
window.location = url + '?coupon=' + code;
}, {
'package': 'quiqqer/order'
self.$addCouponCodeToSession(code).then(function () {
QUIAjax.get('package_quiqqer_order_ajax_frontend_basket_getOrderProcessUrl', function (url) {
window.location = url + '?coupon=' + code;
}, {
'package': 'quiqqer/order'
});
});
});
}, {
......@@ -163,7 +167,30 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
return;
}
OrderProcess.reload();
self.$addCouponCodeToSession(code).then(function () {
OrderProcess.reload();
});
});
},
/**
*
* @param code
* @return {Promise}
*/
$addCouponCodeToSession: function (code) {
return Sessions.get('quiqqer-coupons').then(function (coupons) {
if (!coupons || typeOf(coupons) !== 'array') {
coupons = [];
}
coupons.push(code);
coupons = coupons.filter(function (value, index, self) {
return self.indexOf(value) === index;
});
return Sessions.set('quiqqer-coupons', JSON.encode(coupons));
});
},
......
......@@ -20,4 +20,8 @@
fire="\QUI\ERP\Coupons\Events::onOrderProcess"
/>
</events>
\ No newline at end of file
<event on="onQuiqqerOrderBasketRemovePos"
fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderBasketRemovePos"
/>
</events>
......@@ -61,29 +61,119 @@ public static function onOrderProcess(QUI\ERP\Order\OrderProcess $OrderProcess)
return;
}
if (!isset($_GET['coupon'])) {
$coupons = QUI::getSession()->get('quiqqer-coupons');
if (\is_string($coupons)) {
$coupons = \json_decode($coupons, true);
}
if (!\is_array($coupons)) {
$coupons = [];
}
if (isset($_GET['coupon'])) {
$coupons[] = $_GET['coupon'];
}
$coupons = \array_unique($coupons);
if (empty($coupons)) {
return;
}
$Order = $OrderProcess->getOrder();
foreach ($coupons as $coupon) {
self::addCouponToOrder($Order, $coupon);
}
}
/**
* @param QUI\ERP\Order\Basket\Basket $Basket
* @param $pos
*/
public static function onQuiqqerOrderBasketRemovePos(
QUI\ERP\Order\Basket\Basket $Basket,
$pos
) {
$Order = null;
try {
$Order = $OrderProcess->getOrder();
$code = Handler::sanitizeCode($_GET['coupon']);
$Order = $Basket->getOrder();
} catch (QUI\Exception $Exception) {
$Orders = QUI\ERP\Order\Handler::getInstance();
$CouponCode = Handler::getCouponCodeByCode($code);
$CouponCode->checkRedemption(QUI::getUserBySession());
try {
$Order = $Orders->getLastOrderInProcessFromUser(QUI::getUserBySession());
} catch (QUI\Exception $Exception) {
}
}
$coupons = $Order->getDataEntry('quiqqer-coupons');
$coupons[] = $code;
if (!$Order) {
QUI::getSession()->remove('quiqqer-coupons');
$coupons = \array_unique($coupons);
return;
}
$Order->setData('quiqqer-coupons', $coupons);
$Order->update();
$Article = $Order->getArticles()->getArticle($pos);
$customData = $Article->getCustomData();
$orderCoupons = $Order->getDataEntry('quiqqer-coupons');
$CouponCode->addToOrder($Order);
} catch (\Exception $Exception) {
$articleCouponCode = false;
if (isset($customData['package']) && isset($customData['code'])) {
$articleCouponCode = $customData['code'];
}
if (!$articleCouponCode) {
return;
}
// custom data has code params, so article is an coupon code
// we need to delete it
if (\in_array($articleCouponCode, $orderCoupons)) {
$pos = \array_search($articleCouponCode, $orderCoupons);
unset($orderCoupons[$pos]);
$Order->setData('quiqqer-coupons', $orderCoupons);
try {
$Order->save();
} catch (QUI\Exception $Exception) {
}
}
// look at session coupons
// we need to delete it
$coupons = QUI::getSession()->get('quiqqer-coupons');
if (\is_string($coupons)) {
$coupons = \json_decode($coupons, true);
}
if (!\is_array($coupons) || empty($coupons)) {
return;
}
if (!\in_array($customData['code'], $coupons)) {
return;
}
// remove code from session
// because code is deleted
$newCouponList = [];
foreach ($coupons as $coupon) {
if ($customData['code'] !== $coupon) {
$newCouponList[] = $coupon;
}
}
if (empty($newCouponList)) {
QUI::getSession()->remove('quiqqer-coupons');
} else {
QUI::getSession()->set('quiqqer-coupons', \json_encode($newCouponList));
}
}
......@@ -99,14 +189,23 @@ public static function onQuiqqerOrderBasketToOrder(
QUI\ERP\Order\AbstractOrder $Order,
QUI\ERP\Products\Product\ProductList $Products
) {
$coupons = $Order->getDataEntry('quiqqer-coupons');
$coupons = $Order->getDataEntry('quiqqer-coupons');
$sessionCoupons = QUI::getSession()->get('quiqqer-coupons');
if (!$coupons) {
return;
if (!\is_array($coupons)) {
$coupons = [];
}
if (!\is_array($coupons)) {
return;
if (\is_string($sessionCoupons)) {
$sessionCoupons = \json_decode($sessionCoupons, true);
if (\is_array($sessionCoupons)) {
$coupons = \array_merge($coupons, $sessionCoupons);
}
$coupons = \array_unique($coupons);
self::addSessionCouponsToOrder($Order, $sessionCoupons);
}
if (empty($coupons)) {
......@@ -222,4 +321,60 @@ public static function onQuiqqerOrderSuccessful($Order)
}
}
}
/**
* @param $Order
* @param $coupons
*/
protected static function addSessionCouponsToOrder($Order, $coupons)
{
if (!\is_array($coupons)) {
return;
}
// coupons as article if not added
$Articles = $Order->getArticles();
$isInArticles = function ($code) use ($Articles) {
foreach ($Articles as $Article) {
$customData = $Article->getCustomData();
if (isset($customData['code']) && $customData['code'] === $code) {
return true;
}
}
return false;
};
foreach ($coupons as $coupon) {
if ($isInArticles($coupon) === false) {
self::addCouponToOrder($Order, $coupon);
}
}
}
/**
* @param $Order
* @param $coupon
*/
protected static function addCouponToOrder($Order, $coupon)
{
try {
$code = Handler::sanitizeCode($coupon);
$CouponCode = Handler::getCouponCodeByCode($code);
$CouponCode->checkRedemption(QUI::getUserBySession());
$coupons = $Order->getDataEntry('quiqqer-coupons');
$coupons[] = $code;
$coupons = \array_unique($coupons);
$Order->setData('quiqqer-coupons', $coupons);
$Order->update();
$CouponCode->addToOrder($Order);
} catch (\Exception $Exception) {
}
}
}
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