From 46aac44a8fc7599848adad7c0065f498fdde312c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Patrick=20M=C3=BCller?= <p.mueller@pcsg.de>
Date: Wed, 29 Aug 2018 09:56:34 +0200
Subject: [PATCH] temp commit

---
 ajax/create.php                  |  9 +++-
 ajax/getList.php                 | 20 +++++++--
 bin/controls/Manager.Usages.html | 15 +++++++
 bin/controls/Manager.js          | 70 +++++++++++++++++++++-----------
 locale.xml                       | 12 ++++++
 5 files changed, 97 insertions(+), 29 deletions(-)
 create mode 100644 bin/controls/Manager.Usages.html

diff --git a/ajax/create.php b/ajax/create.php
index 9e5247f..4ec050c 100644
--- a/ajax/create.php
+++ b/ajax/create.php
@@ -20,7 +20,7 @@ function ($attributes) {
 
         try {
             $amount      = 1;
-            $inviteCodes = [];
+            $couponCodes = [];
 
             if (!empty($attributes['amount'])) {
                 $amount = (int)$attributes['amount'];
@@ -28,7 +28,12 @@ function ($attributes) {
             }
 
             for ($i = 0; $i < $amount; $i++) {
-                $inviteCodes[] = Handler::createCouponCode($attributes);
+                $couponCodes[] = Handler::createCouponCode($attributes);
+            }
+
+            /** @var \QUI\ERP\Coupons\CouponCode $Code */
+            foreach ($couponCodes as $Code) {
+                $Code->redeem();
             }
         } catch (\QUI\ERP\Coupons\CouponCodeException $Exception) {
             QUI::getMessagesHandler()->addError(
diff --git a/ajax/getList.php b/ajax/getList.php
index 022b2e8..9f730c8 100644
--- a/ajax/getList.php
+++ b/ajax/getList.php
@@ -21,11 +21,25 @@ function ($searchParams) {
         Permission::hasPermission(Handler::PERMISSION_VIEW);
 
         $searchParams = Orthos::clearArray(json_decode($searchParams, true));
-        $inviteCodes  = array();
+        $inviteCodes  = [];
+        $Users        = QUI::getUsers();
+        $L            = QUI::getLocale();
 
         try {
             foreach (Handler::search($searchParams) as $InviteCode) {
-                $inviteCodes[] = $InviteCode->toArray();
+                $inviteCode = $InviteCode->toArray();
+
+                foreach ($inviteCode['usages'] as $k => $usage) {
+                    // User
+                    $User                                 = $Users->get($usage['userId']);
+                    $inviteCode['usages'][$k]['userName'] = $User->getUsername();
+
+                    // Date
+                    $Date = new DateTime($usage['date']);
+                    $inviteCode['usages'][$k]['date'] = $L->formatDate($Date->getTimestamp());
+                }
+
+                $inviteCodes[] = $inviteCode;
             }
         } catch (\Exception $Exception) {
             QUI\System\Log::writeException($Exception);
@@ -47,6 +61,6 @@ function ($searchParams) {
             Handler::search($searchParams, true)
         );
     },
-    array('searchParams'),
+    ['searchParams'],
     'Permission::checkAdminUser'
 );
diff --git a/bin/controls/Manager.Usages.html b/bin/controls/Manager.Usages.html
new file mode 100644
index 0000000..2cab532
--- /dev/null
+++ b/bin/controls/Manager.Usages.html
@@ -0,0 +1,15 @@
+<div class="quiqqer-coupons-manager-usages">
+    <table>
+        <thead>
+            <tr>
+                <th>
+                    {{headerDate}}
+                </th>
+                <th>
+                    {{headerUser}}
+                </th>
+            </tr>
+        </thead>
+        <tbody></tbody>
+    </table>
+</div>
\ No newline at end of file
diff --git a/bin/controls/Manager.js b/bin/controls/Manager.js
index 36460b1..0c4dde0 100644
--- a/bin/controls/Manager.js
+++ b/bin/controls/Manager.js
@@ -24,10 +24,12 @@ define('package/quiqqer/coupons/bin/controls/Manager', [
 
     'text!package/quiqqer/coupons/bin/controls/Manager.html',
     'text!package/quiqqer/coupons/bin/controls/Manager.Create.html',
+    'text!package/quiqqer/coupons/bin/controls/Manager.Usages.html',
     'css!package/quiqqer/coupons/bin/controls/Manager.css'
 
 ], function (QUI, QUIPanel, QUILoader, QUIPopup, QUIConfirm, QUIButton, QUISeparator,
-             Grid, QUIFormUtils, CouponCodes, QUILocale, Mustache, template, templateCreate) {
+             Grid, QUIFormUtils, CouponCodes, QUILocale, Mustache, template, templateCreate,
+             templateUsages) {
     "use strict";
 
     var lg = 'quiqqer/coupons';
@@ -172,7 +174,8 @@ define('package/quiqqer/coupons/bin/controls/Manager', [
                     header   : QUILocale.get(lg, 'controls.manager.tbl.header.status'),
                     dataIndex: 'status',
                     dataType : 'node',
-                    width    : 200
+                    width    : 200,
+                    className: 'clickable'
                 }, {
                     header   : QUILocale.get(lg, 'controls.manager.tbl.header.validUntilDate'),
                     dataIndex: 'validUntilDate',
@@ -188,10 +191,6 @@ define('package/quiqqer/coupons/bin/controls/Manager', [
                     dataIndex: 'createDate',
                     dataType : 'string',
                     width    : 150
-                }, {
-                    dataIndex: 'userId',
-                    dataType : 'number',
-                    hidden   : true
                 }],
                 pagination       : true,
                 serverSort       : true,
@@ -216,14 +215,7 @@ define('package/quiqqer/coupons/bin/controls/Manager', [
                     }
 
                     var Row = selected[0];
-
-                    if (Row.userId) {
-                        self.Loader.show();
-
-                        self.$openUserPanel(Row.userId).then(function () {
-                            self.Loader.hide();
-                        });
-                    }
+                    self.$showUsages(Row);
                 },
                 onRefresh : this.$listRefresh
             });
@@ -493,17 +485,47 @@ define('package/quiqqer/coupons/bin/controls/Manager', [
         /**
          * Open user panel
          *
-         * @param {Number} userId
+         * @param {Object} RowData
          */
-        $openUserPanel: function (userId) {
-            return new Promise(function (resolve, reject) {
-                require([
-                    'controls/users/User',
-                    'utils/Panels'
-                ], function (UserPanel, PanelUtils) {
-                    PanelUtils.openPanelInTasks(new UserPanel(userId)).then(resolve, reject);
-                }.bind(this));
-            });
+        $showUsages: function (RowData) {
+            new QUIConfirm({
+                maxHeight: 550,
+                maxWidth : 400,
+                autoclose: false,
+
+                title: QUILocale.get(lg, 'controls.Manager.usages.title', {code: RowData.code}),
+                icon : 'fa fa-user',
+
+                cancel_button: false,
+                ok_button    : {
+                    text     : false,
+                    textimage: 'icon-ok fa fa-check'
+                },
+                events       : {
+                    onOpen: function (Popup) {
+                        var lgPrefix = 'controls.Manager.usages.template.';
+
+                        Popup.setContent(Mustache.render(templateUsages, {
+                            headerUser: QUILocale.get(lg, lgPrefix + 'headerUser'),
+                            headerDate: QUILocale.get(lg, lgPrefix + 'headerDate')
+                        }));
+
+                        var Content   = Popup.getContent();
+                        var TableBody = Content.getElement('tbody');
+
+                        console.log(TableBody);
+
+                        for (var i = 0, len = RowData.usages.length; i < len; i++) {
+                            var usage = RowData.usages[i];
+
+                            new Element('tr', {
+                                html: '<td>' + usage.date + '</td>' +
+                                    '<td>' + usage.userId + ' (' + usage.userName + ')</td>'
+                            }).inject(TableBody);
+                        }
+                    }
+                }
+            }).open();
         }
     });
 });
diff --git a/locale.xml b/locale.xml
index e4b05a3..4c8d008 100644
--- a/locale.xml
+++ b/locale.xml
@@ -263,5 +263,17 @@
             <de><![CDATA[Coupon-Codes, die bereits versendet wurden, nochmals versenden]]></de>
             <en><![CDATA[Resend Coupon codes that have already been sent]]></en>
         </locale>
+        <locale name="controls.Manager.usages.title">
+            <de><![CDATA[Verwendungen von Coupon-Code "[code]"]]></de>
+            <en><![CDATA[Usages of Coupon code "[code]"]]></en>
+        </locale>
+        <locale name="controls.Manager.usages.template.headerUser">
+            <de><![CDATA[Benutzer]]></de>
+            <en><![CDATA[User]]></en>
+        </locale>
+        <locale name="controls.Manager.usages.template.headerDate">
+            <de><![CDATA[Datum]]></de>
+            <en><![CDATA[Date]]></en>
+        </locale>
     </groups>
 </locales>
-- 
GitLab