From a717b586c964afb815e1eb63f6b3fd6acefb90f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de> Date: Thu, 20 Sep 2018 16:36:09 +0200 Subject: [PATCH] feat: save order prefixed id in coupon usage --- bin/backend/controls/Manager.Usages.html | 5 ++++- bin/backend/controls/Manager.css | 6 +++++- bin/backend/controls/Manager.js | 13 +++++++++---- events.xml | 4 ++++ locale.xml | 4 ++++ src/QUI/ERP/Coupons/CouponCode.php | 19 ++++++++++++++----- src/QUI/ERP/Coupons/Events.php | 23 +++++++++++++++++++++++ 7 files changed, 63 insertions(+), 11 deletions(-) diff --git a/bin/backend/controls/Manager.Usages.html b/bin/backend/controls/Manager.Usages.html index 5a3b5ec..8e8a8d6 100644 --- a/bin/backend/controls/Manager.Usages.html +++ b/bin/backend/controls/Manager.Usages.html @@ -5,9 +5,12 @@ <th class="quiqqer-coupons-manager-usages-tbl-date"> {{headerDate}} </th> - <th> + <th class="quiqqer-coupons-manager-usages-tbl-user"> {{headerUser}} </th> + <th> + {{headerOrderPrefixedId}} + </th> </tr> </thead> <tbody></tbody> diff --git a/bin/backend/controls/Manager.css b/bin/backend/controls/Manager.css index 63977b1..e085853 100644 --- a/bin/backend/controls/Manager.css +++ b/bin/backend/controls/Manager.css @@ -82,5 +82,9 @@ } .quiqqer-coupons-manager-usages-tbl-date { - width: 150px; + width: 100px; +} + +.quiqqer-coupons-manager-usages-tbl-user { + width: 200px; } \ No newline at end of file diff --git a/bin/backend/controls/Manager.js b/bin/backend/controls/Manager.js index 8bf5a0d..0ffa025 100644 --- a/bin/backend/controls/Manager.js +++ b/bin/backend/controls/Manager.js @@ -572,7 +572,7 @@ define('package/quiqqer/coupons/bin/backend/controls/Manager', [ $showUsages: function (RowData) { new QUIConfirm({ maxHeight: 550, - maxWidth : 400, + maxWidth : 600, autoclose: false, title: QUILocale.get(lg, 'controls.Manager.usages.title', {code: RowData.code}), @@ -591,8 +591,9 @@ define('package/quiqqer/coupons/bin/backend/controls/Manager', [ var lgPrefix = 'controls.Manager.usages.template.'; Popup.setContent(Mustache.render(templateUsages, { - headerUser: QUILocale.get(lg, lgPrefix + 'headerUser'), - headerDate: QUILocale.get(lg, lgPrefix + 'headerDate') + headerUser : QUILocale.get(lg, lgPrefix + 'headerUser'), + headerDate : QUILocale.get(lg, lgPrefix + 'headerDate'), + headerOrderPrefixedId: QUILocale.get(lg, lgPrefix + 'headerOrderPrefixedId') })); var Content = Popup.getContent(); @@ -601,10 +602,14 @@ define('package/quiqqer/coupons/bin/backend/controls/Manager', [ for (var i = 0, len = RowData.usages.length; i < len; i++) { var usage = RowData.usages[i]; - new Element('tr', { + var Row = new Element('tr', { html: '<td>' + usage.date + '</td>' + '<td>' + usage.userId + ' (' + usage.userName + ')</td>' }).inject(TableBody); + + new Element('td', { + html: usage.orderPrefixedId ? usage.orderPrefixedId : '-' + }).inject(Row); } } } diff --git a/events.xml b/events.xml index 65b98cf..faefcba 100644 --- a/events.xml +++ b/events.xml @@ -6,4 +6,8 @@ <event on="onQuiqqerOrderBasketToOrder" fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderBasketToOrder" /> + <event on="onQuiqqerOrderSuccessful" + fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderSuccessful" + /> + </events> \ No newline at end of file diff --git a/locale.xml b/locale.xml index 3113591..f55c3de 100644 --- a/locale.xml +++ b/locale.xml @@ -332,6 +332,10 @@ <de><![CDATA[Datum]]></de> <en><![CDATA[Date]]></en> </locale> + <locale name="controls.Manager.usages.template.headerOrderPrefixedId"> + <de><![CDATA[Bestellung]]></de> + <en><![CDATA[Order]]></en> + </locale> <locale name="controls.Manager.usages.btn_ok"> <de><![CDATA[OK]]></de> <en><![CDATA[OK]]></en> diff --git a/src/QUI/ERP/Coupons/CouponCode.php b/src/QUI/ERP/Coupons/CouponCode.php index 8852f1f..9de161c 100644 --- a/src/QUI/ERP/Coupons/CouponCode.php +++ b/src/QUI/ERP/Coupons/CouponCode.php @@ -233,11 +233,12 @@ public function getDiscounts() * Hint: This may invalidate the code for future use * * @param QUI\Users\User $User - The user that redeems the CouponCode [if omitted use Session User] + * @param QUI\ERP\Order\Order $Order (optional) - Link redemption to a specific Order * @return void * @throws CouponCodeException * @throws QUI\Exception */ - public function redeem($User = null) + public function redeem($User = null, $Order = null) { if (is_null($User)) { $User = QUI::getUserBySession(); @@ -245,12 +246,20 @@ public function redeem($User = null) $this->checkRedemption($User); - $Now = new \DateTime(); - $this->usages[] = [ - 'userId' => $User->getId(), - 'date' => $Now->format('Y-m-d H:i:s') + $Now = new \DateTime(); + + $usage = [ + 'userId' => $User->getId(), + 'date' => $Now->format('Y-m-d H:i:s'), + 'orderPrefixedId' => false ]; + if (!is_null($Order) && $Order instanceof QUI\ERP\Order\Order) { + $usage['orderPrefixedId'] = $Order->getPrefixedId(); + } + + $this->usages[] = $usage; + QUI::getDataBase()->update( Handler::getTable(), [ diff --git a/src/QUI/ERP/Coupons/Events.php b/src/QUI/ERP/Coupons/Events.php index e6b3207..7617e68 100644 --- a/src/QUI/ERP/Coupons/Events.php +++ b/src/QUI/ERP/Coupons/Events.php @@ -6,6 +6,7 @@ use Quiqqer\Engine\Collector; use QUI\ERP\Order\Basket\Basket; use QUI\ERP\Order\Basket\BasketGuest; +use QUI\ERP\Coupons\Handler as CouponsHandler; /** * Class Events @@ -93,4 +94,26 @@ public static function onQuiqqerOrderBasketToOrder( } catch (QUI\Exception $Exception) { } } + + /** + * quiqqer/order: onQuiqqerOrderSuccessful + * + * Redeem coupons used in (completed) orders + * + * @param QUI\ERP\Order\Order|QUI\ERP\Order\OrderInProcess $Order + * @return void + */ + public static function onQuiqqerOrderSuccessful($Order) + { + $coupons = $Order->getDataEntry('quiqqer-coupons'); + + foreach ($coupons as $couponCode) { + try { + $CouponCode = CouponsHandler::getCouponCodeByCode($couponCode); + $CouponCode->redeem($Order->getCustomer(), $Order); + } catch (\Exception $Exception) { + QUI\System\Log::writeException($Exception); + } + } + } } -- GitLab