Skip to content
Code-Schnipsel Gruppen Projekte
Commit 2bfff68e erstellt von Patrick Müller's avatar Patrick Müller
Dateien durchsuchen

feat: CouponCodeInput for basket

Übergeordneter ed7388e9
No related branches found
No related tags found
Keine zugehörigen Merge Requests gefunden
werden angezeigt mit 351 Ergänzungen und 32 Löschungen
<?php
/**
* This file contains package_quiqqer_coupons_ajax_delete
*/
use QUI\ERP\Coupons\Handler;
/**
* Redeem a CouponCode
*
* @param int $id - CouponCode ID
* @return bool - success
*/
QUI::$Ajax->registerFunction(
'package_quiqqer_coupons_ajax_frontend_redeem',
function ($id) {
$id = (int)$id;
try {
$CouponCode = Handler::getCouponCode($id);
// @todo
} catch (\Exception $Exception) {
QUI\System\Log::writeException($Exception);
QUI::getMessagesHandler()->addError(
QUI::getLocale()->get(
'quiqqer/coupons',
'message.ajax.general_error'
)
);
return false;
}
return true;
},
['id'],
'Permission::checkAdminUser'
);
/** /**
* CouponCodes Handler * CouponCodes Handler
* *
* @module package/quiqqer/coupons/bin/classes/CouponCodes * @module package/quiqqer/coupons/bin/backend/classes/CouponCodes
* @author www.pcsg.de (Patrick Müller) * @author www.pcsg.de (Patrick Müller)
* *
* @require Ajax * @require Ajax
*/ */
define('package/quiqqer/coupons/bin/CouponCodes', [ define('package/quiqqer/coupons/bin/backend/CouponCodes', [
'package/quiqqer/coupons/bin/classes/CouponCodes' 'package/quiqqer/coupons/bin/backend/classes/CouponCodes'
], function (CouponCodesManager) { ], function (CouponCodesManager) {
"use strict"; "use strict";
......
/** /**
* CouponCodes Handler * CouponCodes Handler
* *
* @module package/quiqqer/coupons/bin/classes/CouponCodes * @module package/quiqqer/coupons/bin/backend/classes/CouponCodes
* @author www.pcsg.de (Patrick Müller) * @author www.pcsg.de (Patrick Müller)
* *
* @require Ajax * @require Ajax
*/ */
define('package/quiqqer/coupons/bin/classes/CouponCodes', [ define('package/quiqqer/coupons/bin/backend/classes/CouponCodes', [
'Ajax' 'Ajax'
...@@ -17,7 +17,7 @@ define('package/quiqqer/coupons/bin/classes/CouponCodes', [ ...@@ -17,7 +17,7 @@ define('package/quiqqer/coupons/bin/classes/CouponCodes', [
return new Class({ return new Class({
Type: 'package/quiqqer/coupons/bin/classes/CouponCodes', Type: 'package/quiqqer/coupons/bin/backend/classes/CouponCodes',
/** /**
* Create new CouponCode * Create new CouponCode
......
Datei verschoben
Datei verschoben
Datei verschoben
Datei verschoben
/** /**
* Manage Invite Codes * Manage Invite Codes
* *
* @module package/quiqqer/coupons/bin/controls/Manager * @module package/quiqqer/coupons/bin/backend/controls/Manager
* @author www.pcsg.de (Patrick Müller) * @author www.pcsg.de (Patrick Müller)
*/ */
define('package/quiqqer/coupons/bin/controls/Manager', [ define('package/quiqqer/coupons/bin/backend/controls/Manager', [
'qui/QUI', 'qui/QUI',
'qui/controls/desktop/Panel', 'qui/controls/desktop/Panel',
...@@ -17,15 +17,15 @@ define('package/quiqqer/coupons/bin/controls/Manager', [ ...@@ -17,15 +17,15 @@ define('package/quiqqer/coupons/bin/controls/Manager', [
'controls/grid/Grid', 'controls/grid/Grid',
'qui/utils/Form', 'qui/utils/Form',
'package/quiqqer/coupons/bin/CouponCodes', 'package/quiqqer/coupons/bin/backend/CouponCodes',
'Locale', 'Locale',
'Mustache', 'Mustache',
'text!package/quiqqer/coupons/bin/controls/Manager.html', 'text!package/quiqqer/coupons/bin/backend/controls/Manager.html',
'text!package/quiqqer/coupons/bin/controls/Manager.Create.html', 'text!package/quiqqer/coupons/bin/backend/controls/Manager.Create.html',
'text!package/quiqqer/coupons/bin/controls/Manager.Usages.html', 'text!package/quiqqer/coupons/bin/backend/controls/Manager.Usages.html',
'css!package/quiqqer/coupons/bin/controls/Manager.css' 'css!package/quiqqer/coupons/bin/backend/controls/Manager.css'
], function (QUI, QUIPanel, QUILoader, QUIPopup, QUIConfirm, QUIButton, QUISeparator, ], function (QUI, QUIPanel, QUILoader, QUIPopup, QUIConfirm, QUIButton, QUISeparator,
Grid, QUIFormUtils, CouponCodes, QUILocale, Mustache, template, templateCreate, Grid, QUIFormUtils, CouponCodes, QUILocale, Mustache, template, templateCreate,
...@@ -37,7 +37,7 @@ define('package/quiqqer/coupons/bin/controls/Manager', [ ...@@ -37,7 +37,7 @@ define('package/quiqqer/coupons/bin/controls/Manager', [
return new Class({ return new Class({
Extends: QUIPanel, Extends: QUIPanel,
Type : 'package/quiqqer/coupons/bin/controls/Manager', Type : 'package/quiqqer/coupons/bin/backend/controls/Manager',
Binds: [ Binds: [
'$onCreate', '$onCreate',
...@@ -445,11 +445,7 @@ define('package/quiqqer/coupons/bin/controls/Manager', [ ...@@ -445,11 +445,7 @@ define('package/quiqqer/coupons/bin/controls/Manager', [
)); ));
if (CouponData) { if (CouponData) {
console.log(CouponData);
CouponData.discountIds = CouponData.discountIds.join(','); CouponData.discountIds = CouponData.discountIds.join(',');
QUIFormUtils.setDataToForm(CouponData, Form); QUIFormUtils.setDataToForm(CouponData, Form);
} }
...@@ -602,8 +598,6 @@ define('package/quiqqer/coupons/bin/controls/Manager', [ ...@@ -602,8 +598,6 @@ define('package/quiqqer/coupons/bin/controls/Manager', [
var Content = Popup.getContent(); var Content = Popup.getContent();
var TableBody = Content.getElement('tbody'); var TableBody = Content.getElement('tbody');
console.log(TableBody);
for (var i = 0, len = RowData.usages.length; i < len; i++) { for (var i = 0, len = RowData.usages.length; i < len; i++) {
var usage = RowData.usages[i]; var usage = RowData.usages[i];
......
/** /**
* Select available CodeGenerators * Select available CodeGenerators
* *
* @module package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect * @module package/quiqqer/coupons/bin/backend/controls/settings/CodeGeneratorSelect
* @author www.pcsg.de (Patrick Müller) * @author www.pcsg.de (Patrick Müller)
*/ */
define('package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect', [ define('package/quiqqer/coupons/bin/backend/controls/settings/CodeGeneratorSelect', [
'qui/controls/buttons/Select', 'qui/controls/buttons/Select',
'qui/controls/loader/Loader', 'qui/controls/loader/Loader',
...@@ -12,7 +12,7 @@ define('package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect', [ ...@@ -12,7 +12,7 @@ define('package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect', [
'Locale', 'Locale',
'Ajax', 'Ajax',
'css!package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect.css' 'css!package/quiqqer/coupons/bin/backend/controls/settings/CodeGeneratorSelect.css'
], function (QUISelect, QUILoader, QUILocale, QUIAjax) { ], function (QUISelect, QUILoader, QUILocale, QUIAjax) {
"use strict"; "use strict";
...@@ -21,7 +21,7 @@ define('package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect', [ ...@@ -21,7 +21,7 @@ define('package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect', [
return new Class({ return new Class({
Extends: QUISelect, Extends: QUISelect,
Type : 'package/quiqqer/coupons/bin/controls/settings/CodeGeneratorSelect', Type : 'package/quiqqer/coupons/bin/backend/controls/settings/CodeGeneratorSelect',
Binds: [ Binds: [
'$onImport' '$onImport'
......
/**
* CouponCodes Handler (Frontend)
*
* @module package/quiqqer/coupons/bin/frontend/classes/CouponCodes
* @author www.pcsg.de (Patrick Müller)
*
* @require Ajax
*/
define('package/quiqqer/coupons/bin/frontend/CouponCodes', [
'package/quiqqer/coupons/bin/frontend/classes/CouponCodes'
], function (CouponCodesManager) {
"use strict";
return new CouponCodesManager();
});
/**
* CouponCodes Handler (Frontend)
*
* @module package/quiqqer/coupons/bin/frontend/classes/CouponCodes
* @author www.pcsg.de (Patrick Müller)
*
* @require Ajax
*/
define('package/quiqqer/coupons/bin/frontend/classes/CouponCodes', [
'Ajax'
], function (QUIAjax) {
"use strict";
var pkg = 'quiqqer/coupons';
return new Class({
Type: 'package/quiqqer/coupons/bin/frontend/classes/CouponCodes',
/**
* Adds a coupon to the current session basket
*
* @param {String} code
* @return {Promise}
*/
addCouponCodeToBasket: function (code) {
return new Promise(function (resolve, reject) {
QUIAjax.post('package_quiqqer_coupons_ajax_frontend_redeem', resolve, {
'package': pkg,
code : code,
onError : reject
});
});
}
});
});
<div class="quiqqer-coupons-couponcodeinput">
<label>
<span>{{labelInput}}</span>
<input type="text" name="code"/>
</label>
<button class="quiqqer-coupons-couponcodeinput-btn">
<span>{{submitBtnText}}</span>
</button>
</div>
\ No newline at end of file
/**
* CouponCodeInput
*
* @module package/quiqqer/coupons/bin/frontend/classes/CouponCodeInput
* @author www.pcsg.de (Patrick Müller)
*/
define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
'qui/controls/Control',
'qui/controls/loader/Loader',
'package/quiqqer/coupons/bin/frontend/CouponCodes',
'Locale',
'Mustache',
'text!package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput.html',
//'css!package/quiqqer/coupons/bin/frontend/classes/CouponCodeInput.css'
], function (QUIControl, QUILoader, CouponCodes, QUILocale, Mustache, template) {
"use strict";
var lg = 'quiqqer/coupons';
return new Class({
Extends: QUIControl,
Type : 'package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput',
Binds: [
'$submit'
],
initialize: function (options) {
this.parent(options);
this.$Input = null;
this.Loader = new QUILoader();
this.addEvents({
onInject: this.$onInject
});
},
/**
* Event: onInject
*/
$onInject: function () {
var self = this;
var lgPrefix = 'controls.frontend.CouponCodeInput.template.';
this.$Elm.set('html', Mustache.render(template, {
labelInput : QUILocale.get(lg, lgPrefix + 'labelInput'),
submitBtnText: QUILocale.get(lg, lgPrefix + 'submitBtnText')
}));
this.Loader.inject(this.$Elm);
this.$Input = this.$Elm.getElement('input[name="code"]');
this.$Input.addEvent('keyup', function (event) {
if (event.code === 13) {
self.$submit();
}
});
var SubmitBtn = this.$Elm.getElement('button.quiqqer-coupons-couponcodeinput-btn');
SubmitBtn.addEvent('click', function (event) {
event.stop();
self.$submit();
});
},
/**
* Submit a CouponCode
*/
$submit: function () {
var self = this;
var code = this.$Input.value.trim();
if (code === '') {
this.$Input.focus();
return;
}
this.Loader.show();
CouponCodes.addCouponCodeToBasket(code).then(function () {
// @todo
self.Loader.hide();
});
}
});
});
<?xml version="1.0" encoding="UTF-8"?>
<events>
<event on="onQuiqqer::order::orderProcessBasketEnd" fire="\QUI\ERP\Coupons\Events::templateOrderProcessBasketEnd"/>
<!--<event on="onQuiqqer::order::basketSmall::end" fire="\QUI\ERP\Payments\PayPal\Events::templateOrderBasketSmallEnd"/>-->
</events>
\ No newline at end of file
...@@ -327,5 +327,15 @@ ...@@ -327,5 +327,15 @@
<de><![CDATA[Erweiterte Einstellungen ausblenden]]></de> <de><![CDATA[Erweiterte Einstellungen ausblenden]]></de>
<en><![CDATA[Hide advanced settings]]></en> <en><![CDATA[Hide advanced settings]]></en>
</locale> </locale>
<!-- Control: frontend/controls/CouponCodeInput -->
<locale name="controls.frontend.CouponCodeInput.template.labelInput">
<de><![CDATA[Coupon-Code]]></de>
<en><![CDATA[Coupon code]]></en>
</locale>
<locale name="controls.frontend.CouponCodeInput.template.submitBtnText">
<de><![CDATA[Einlösen]]></de>
<en><![CDATA[Redeem]]></en>
</locale>
</groups> </groups>
</locales> </locales>
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
</item> </item>
<item parent="/extras/erp/" <item parent="/extras/erp/"
name="couponcodes" name="couponcodes"
require="package/quiqqer/coupons/bin/controls/Manager" require="package/quiqqer/coupons/bin/backend/controls/Manager"
icon="fa fa-credit-card-alt" icon="fa fa-credit-card-alt"
> >
<locale group="quiqqer/coupons" var="menu.erp.couponcodes.title" /> <locale group="quiqqer/coupons" var="menu.erp.couponcodes.title" />
......
...@@ -206,6 +206,27 @@ public function getDiscountIds() ...@@ -206,6 +206,27 @@ public function getDiscountIds()
return $this->discountIds; return $this->discountIds;
} }
/**
* Get all discounts associated with this CouponCode
*
* @return QUI\ERP\Discount\Discount[]
*/
public function getDiscounts()
{
$discounts = [];
$DiscountHandler = DiscountHandler::getInstance();
foreach ($this->discountIds as $discountId) {
try {
$discounts[] = $DiscountHandler->getChild($discountId);
} catch (\Exception $Exception) {
QUI\System\Log::writeDebugException($Exception);
}
}
return $discounts;
}
/** /**
* Redeems this CouponCode * Redeems this CouponCode
* *
...@@ -260,6 +281,13 @@ public function redeem($User = null) ...@@ -260,6 +281,13 @@ public function redeem($User = null)
*/ */
protected function checkRedemption($User) protected function checkRedemption($User)
{ {
if (!$this->isValid()) {
throw new CouponCodeException([
'quiqqer/coupons',
'exception.CouponCode.no_longer_valid'
]);
}
$DiscountHandler = DiscountHandler::getInstance(); $DiscountHandler = DiscountHandler::getInstance();
$discountsValid = false; $discountsValid = false;
$discountError = false; $discountError = false;
...@@ -296,13 +324,6 @@ protected function checkRedemption($User) ...@@ -296,13 +324,6 @@ protected function checkRedemption($User)
} }
} }
if (!$this->isValid()) {
throw new CouponCodeException([
'quiqqer/coupons',
'exception.CouponCode.no_longer_valid'
]);
}
if (!empty($this->userIds)) { if (!empty($this->userIds)) {
if (in_array($User->getId(), $this->userIds)) { if (in_array($User->getId(), $this->userIds)) {
if (!$this->reusable && $this->hasUserRedeemed($User)) { if (!$this->reusable && $this->hasUserRedeemed($User)) {
......
<?php
namespace QUI\ERP\Coupons;
use QUI;
use Quiqqer\Engine\Collector;
use QUI\ERP\Order\Basket\Basket;
use QUI\ERP\Order\Basket\BasketGuest;
use QUI\ERP\Order\Utils\Utils as OrderUtils;
use QUI\ERP\Order\Controls\OrderProcess\Checkout as CheckoutStep;
/**
* Class Events
*
* Global Event Handler for quiqqer/payment-paypal
*/
class Events
{
/**
* Template event quiqqer/order: onQuiqqer::order::orderProcessBasketEnd
*
* @param Collector $Collector
* @param BasketGuest $Basket
* @return void
*
* @throws QUI\Exception
*/
public static function templateOrderProcessBasketEnd(Collector $Collector, $Basket)
{
if (!($Basket instanceof Basket)) {
return;
}
$Collector->append(
'<div data-qui="package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput"></div>'
);
}
// /**
// * Template event quiqqer/order: onQuiqqer::order::basketSmall::end
// *
// * @param Collector $Collector
// * @param BasketGuest $Basket
// * @return void
// *
// * @throws QUI\Exception
// */
// public static function templateOrderBasketSmallEnd(Collector $Collector, $Basket)
// {
// $PaymentExpress = Provider::getPayPalExpressPayment();
//
// if (!$PaymentExpress || !$PaymentExpress->isActive()) {
// return;
// }
//
// if (!($Basket instanceof Basket)) {
// return;
// }
//
// // do not display PayPal button if basket has no articles
// if (!$Basket->count()) {
// return;
// }
//
// $Project = QUI::getProjectManager()->getStandard();
// $CheckoutStep = new CheckoutStep();
// $checkout = 0;
//
// if ($Basket->hasOrder()) {
// $Order = $Basket->getOrder();
//
// if ($Order->getPaymentDataEntry(Payment::ATTR_PAYPAL_PAYMENT_ID)) {
// $checkout = 1;
// }
// }
//
// $Collector->append(
// '<div data-qui="package/quiqqer/payment-paypal/bin/controls/ExpressBtnLoader"
// data-qui-options-context="smallbasket"
// data-qui-options-basketid="' . $Basket->getId() . '"
// data-qui-options-checkout="' . $checkout . '"
// data-qui-options-displaysize="' . Provider::getWidgetsSetting('btn_express_size_smallbasket') . '"
// data-qui-options-displaycolor="' . Provider::getWidgetsSetting('btn_express_color') . '"
// data-qui-options-displayshape="' . Provider::getWidgetsSetting('btn_express_shape') . '"
// data-qui-options-orderprocessurl="' . OrderUtils::getOrderProcessUrl($Project, $CheckoutStep) . '">
// </div>'
// );
// }
}
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