From e998a65e72ab3a963597386ddaf8011f22dc771d Mon Sep 17 00:00:00 2001
From: Henning Leutz <leutz@pcsg.de>
Date: Tue, 13 Mar 2018 11:35:37 +0100
Subject: [PATCH] refactor: code style; refactor: payment / transaction listing
 from the invoice hash

---
 ajax/invoices/addPayment.php                  |  2 +-
 ajax/invoices/articleHtml.php                 |  2 +-
 ajax/invoices/copy.php                        |  2 +-
 ajax/invoices/createCreditNote.php            |  2 +-
 ajax/invoices/get.php                         | 11 ++--
 ajax/invoices/list.php                        |  2 +-
 ajax/invoices/payments/format.php             |  8 +--
 ajax/invoices/reversal.php                    |  2 +-
 ajax/invoices/search.php                      |  2 +-
 ajax/invoices/temporary/calc.php              |  2 +-
 ajax/invoices/temporary/copy.php              |  2 +-
 ajax/invoices/temporary/delete.php            |  2 +-
 ajax/invoices/temporary/get.php               |  2 +-
 ajax/invoices/temporary/getTimeForPayment.php |  2 +-
 ajax/invoices/temporary/html.php              |  2 +-
 ajax/invoices/temporary/isNetto.php           |  2 +-
 ajax/invoices/temporary/list.php              |  8 +--
 ajax/invoices/temporary/lock.php              |  3 +-
 ajax/invoices/temporary/missing.php           |  4 +-
 ajax/invoices/temporary/post.php              |  2 +-
 ajax/invoices/temporary/previewhtml.php       |  2 +-
 ajax/invoices/temporary/product/calc.php      |  2 +-
 .../temporary/product/getProductEdit.php      |  8 +--
 .../product/hasProductCustomFields.php        |  2 +-
 .../product/parseProductToArticle.php         |  4 +-
 ajax/invoices/temporary/product/summary.php   |  6 +--
 ajax/invoices/temporary/save.php              |  2 +-
 ajax/invoices/temporary/unlock.php            |  3 +-
 bin/backend/controls/panels/Invoice.css       |  1 +
 bin/backend/controls/panels/Invoice.js        |  4 +-
 .../controls/panels/Journal.Payments.js       | 52 ++++++++++---------
 bin/backend/controls/panels/Journal.js        |  5 +-
 locale.xml                                    |  4 +-
 src/QUI/ERP/Accounting/Invoice/Handler.php    |  4 +-
 34 files changed, 85 insertions(+), 78 deletions(-)

diff --git a/ajax/invoices/addPayment.php b/ajax/invoices/addPayment.php
index 42c6e69..7afc367 100644
--- a/ajax/invoices/addPayment.php
+++ b/ajax/invoices/addPayment.php
@@ -24,6 +24,6 @@ function ($invoiceId, $amount, $paymentMethod, $date) {
 
         $Invoice->addPayment($amount, $Payment, $date);
     },
-    array('invoiceId', 'amount', 'paymentMethod', 'date'),
+    ['invoiceId', 'amount', 'paymentMethod', 'date'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/articleHtml.php b/ajax/invoices/articleHtml.php
index 7e8a5b6..2a36f14 100644
--- a/ajax/invoices/articleHtml.php
+++ b/ajax/invoices/articleHtml.php
@@ -20,6 +20,6 @@ function ($invoiceId) {
 
         return $Articles->toHTMLWithCSS();
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/copy.php b/ajax/invoices/copy.php
index 47c95e9..8c82d22 100644
--- a/ajax/invoices/copy.php
+++ b/ajax/invoices/copy.php
@@ -16,6 +16,6 @@ function ($invoiceId) {
 
         return $Invoices->getInvoice($invoiceId)->copy()->getId();
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/createCreditNote.php b/ajax/invoices/createCreditNote.php
index a3d2337..67c7fac 100644
--- a/ajax/invoices/createCreditNote.php
+++ b/ajax/invoices/createCreditNote.php
@@ -17,6 +17,6 @@ function ($invoiceId) {
 
         return $Invoice->createCreditNote()->getId();
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/get.php b/ajax/invoices/get.php
index 0b2ecaa..7eda030 100644
--- a/ajax/invoices/get.php
+++ b/ajax/invoices/get.php
@@ -17,9 +17,14 @@
     'package_quiqqer_invoice_ajax_invoices_get',
     function ($invoiceId) {
         $Invoices = QUI\ERP\Accounting\Invoice\Handler::getInstance();
-        $Invoice  = $Invoices->get($invoiceId);
 
-        QUI\ERP\Accounting\Calc::calculateInvoicePayments($Invoice);
+        try {
+            $Invoice = $Invoices->get($invoiceId);
+        } catch (QUI\Exception $Exception) {
+            $Invoice = $Invoices->getInvoiceByHash($invoiceId);
+        }
+
+        QUI\ERP\Accounting\Calc::calculatePayments($Invoice);
 
         $attributes = $Invoice->toArray();
         $Currency   = $Invoice->getCurrency();
@@ -33,6 +38,6 @@ function ($invoiceId) {
 
         return $attributes;
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/list.php b/ajax/invoices/list.php
index e1cdbcc..47fb718 100644
--- a/ajax/invoices/list.php
+++ b/ajax/invoices/list.php
@@ -30,6 +30,6 @@ function ($params) {
 
         return $Search->search();
     },
-    array('params'),
+    ['params'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/payments/format.php b/ajax/invoices/payments/format.php
index d95466b..31d2e7a 100644
--- a/ajax/invoices/payments/format.php
+++ b/ajax/invoices/payments/format.php
@@ -13,7 +13,7 @@
     'package_quiqqer_invoice_ajax_invoices_payments_format',
     function ($payments) {
         $payments = json_decode($payments, true);
-        $result   = array();
+        $result   = [];
 
         $Locale   = QUI::getLocale();
         $Currency = QUI\ERP\Defaults::getCurrency();
@@ -29,15 +29,15 @@ function ($payments) {
             } catch (QUI\Exception $Exception) {
             }
 
-            $result[] = array(
+            $result[] = [
                 'date'    => $Locale->formatDate($payment['date']),
                 'amount'  => $Currency->format($payment['amount']),
                 'payment' => $paymentTitle
-            );
+            ];
         }
 
         return $result;
     },
-    array('payments'),
+    ['payments'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/reversal.php b/ajax/invoices/reversal.php
index 7119725..891495a 100644
--- a/ajax/invoices/reversal.php
+++ b/ajax/invoices/reversal.php
@@ -15,6 +15,6 @@ function ($invoiceId, $reason) {
 
         return $Invoice->reversal($reason);
     },
-    array('invoiceId', 'reason'),
+    ['invoiceId', 'reason'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/search.php b/ajax/invoices/search.php
index 3d09cae..a76f1d3 100644
--- a/ajax/invoices/search.php
+++ b/ajax/invoices/search.php
@@ -38,6 +38,6 @@ function ($params, $filter) {
 
         return $Search->searchForGrid();
     },
-    array('params', 'filter'),
+    ['params', 'filter'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/calc.php b/ajax/invoices/temporary/calc.php
index 7675ad4..dda54dc 100644
--- a/ajax/invoices/temporary/calc.php
+++ b/ajax/invoices/temporary/calc.php
@@ -37,6 +37,6 @@ function ($articles, $user) {
 
         return $List->getCalculations();
     },
-    array('articles', 'user'),
+    ['articles', 'user'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/copy.php b/ajax/invoices/temporary/copy.php
index e5c3962..d151841 100644
--- a/ajax/invoices/temporary/copy.php
+++ b/ajax/invoices/temporary/copy.php
@@ -18,6 +18,6 @@ function ($invoiceId) {
             ->copy()
             ->getId();
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/delete.php b/ajax/invoices/temporary/delete.php
index 58b689f..b0c75e2 100644
--- a/ajax/invoices/temporary/delete.php
+++ b/ajax/invoices/temporary/delete.php
@@ -15,6 +15,6 @@ function ($invoiceId) {
         $Invoices = QUI\ERP\Accounting\Invoice\Handler::getInstance();
         $Invoices->delete($invoiceId);
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/get.php b/ajax/invoices/temporary/get.php
index 0ae9eae..46d7fed 100644
--- a/ajax/invoices/temporary/get.php
+++ b/ajax/invoices/temporary/get.php
@@ -19,6 +19,6 @@ function ($invoiceId) {
 
         return $Invoice->toArray();
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/getTimeForPayment.php b/ajax/invoices/temporary/getTimeForPayment.php
index 7e585e2..4e7efcf 100644
--- a/ajax/invoices/temporary/getTimeForPayment.php
+++ b/ajax/invoices/temporary/getTimeForPayment.php
@@ -19,6 +19,6 @@ function ($uid) {
 
         return $permission;
     },
-    array('uid'),
+    ['uid'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/html.php b/ajax/invoices/temporary/html.php
index bba6fbf..5be2979 100644
--- a/ajax/invoices/temporary/html.php
+++ b/ajax/invoices/temporary/html.php
@@ -27,6 +27,6 @@ function ($invoiceId, $data) {
 
         return $Invoice->getView()->toHTML();
     },
-    array('invoiceId', 'data'),
+    ['invoiceId', 'data'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/isNetto.php b/ajax/invoices/temporary/isNetto.php
index c230392..bccdbfd 100644
--- a/ajax/invoices/temporary/isNetto.php
+++ b/ajax/invoices/temporary/isNetto.php
@@ -17,6 +17,6 @@ function ($uid) {
 
         return $status === QUI\ERP\Utils\User::IS_NETTO_USER;
     },
-    array('uid'),
+    ['uid'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/list.php b/ajax/invoices/temporary/list.php
index ab6dc52..ba7473c 100644
--- a/ajax/invoices/temporary/list.php
+++ b/ajax/invoices/temporary/list.php
@@ -28,7 +28,7 @@ function ($params) {
             $Grid->parseDBParams(json_decode($params, true))
         );
 
-        $needleFields = array(
+        $needleFields = [
             'id',
             'order_id',
             'customer_id',
@@ -52,7 +52,7 @@ function ($params) {
             'comments',
             'payment_data',
             'hash'
-        );
+        ];
 
         $fillFields = function (&$data) use ($needleFields) {
             foreach ($needleFields as $field) {
@@ -65,7 +65,7 @@ function ($params) {
         foreach ($data as $key => $entry) {
             $fillFields($data[$key]);
 
-            $data[$key]['id'] = Settings::getInstance()->getTemporaryInvoicePrefix() . $data[$key]['id'];
+            $data[$key]['id'] = Settings::getInstance()->getTemporaryInvoicePrefix().$data[$key]['id'];
 
             try {
                 $Currency = Currencies::getCurrency($data[$key]['currency_data']);
@@ -113,6 +113,6 @@ function ($params) {
 
         return $Grid->parseResult($data, $Invoices->countTemporaryInvoices());
     },
-    array('params'),
+    ['params'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/lock.php b/ajax/invoices/temporary/lock.php
index 2440f70..da561f5 100644
--- a/ajax/invoices/temporary/lock.php
+++ b/ajax/invoices/temporary/lock.php
@@ -14,8 +14,7 @@
     function ($invoiceId) {
         $Invoices = QUI\ERP\Accounting\Invoice\Handler::getInstance();
         $Invoice  = $Invoices->getTemporaryInvoice($invoiceId);
-
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/missing.php b/ajax/invoices/temporary/missing.php
index f1f47fa..08e3558 100644
--- a/ajax/invoices/temporary/missing.php
+++ b/ajax/invoices/temporary/missing.php
@@ -19,7 +19,7 @@ function ($invoiceId) {
         $Invoice  = $Invoices->getTemporaryInvoice($invoiceId);
 
         $missed = $Invoice->getMissingAttributes();
-        $result = array();
+        $result = [];
 
         foreach ($missed as $missing) {
             $result[$missing] = InvoiceUtils::getMissingAttributeMessage($missing);
@@ -27,6 +27,6 @@ function ($invoiceId) {
 
         return $result;
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/post.php b/ajax/invoices/temporary/post.php
index cc71028..1513076 100644
--- a/ajax/invoices/temporary/post.php
+++ b/ajax/invoices/temporary/post.php
@@ -20,6 +20,6 @@ function ($invoiceId) {
 
         return $Invoice->getId();
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/previewhtml.php b/ajax/invoices/temporary/previewhtml.php
index 39c6322..ef23ac4 100644
--- a/ajax/invoices/temporary/previewhtml.php
+++ b/ajax/invoices/temporary/previewhtml.php
@@ -27,6 +27,6 @@ function ($invoiceId, $data) {
 
         return $Invoice->getView()->previewHTML();
     },
-    array('invoiceId', 'data'),
+    ['invoiceId', 'data'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/product/calc.php b/ajax/invoices/temporary/product/calc.php
index 159a5db..2d05142 100644
--- a/ajax/invoices/temporary/product/calc.php
+++ b/ajax/invoices/temporary/product/calc.php
@@ -31,6 +31,6 @@ function ($params, $user) {
 
         return $Article->toArray();
     },
-    array('params', 'user'),
+    ['params', 'user'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/product/getProductEdit.php b/ajax/invoices/temporary/product/getProductEdit.php
index dd04507..bb0b724 100644
--- a/ajax/invoices/temporary/product/getProductEdit.php
+++ b/ajax/invoices/temporary/product/getProductEdit.php
@@ -16,15 +16,15 @@ function ($productId, $user) {
         $Product = Products::getProduct($productId);
         $user    = json_encode($user, true);
 
-        $Control = new ProductEdit(array(
+        $Control = new ProductEdit([
             'Product' => $Product
-        ));
+        ]);
 
         $css  = ''; //QUI\Control\Manager::getCSS();
         $html = $Control->create();
 
-        return $css . $html;
+        return $css.$html;
     },
-    array('productId', 'user'),
+    ['productId', 'user'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/product/hasProductCustomFields.php b/ajax/invoices/temporary/product/hasProductCustomFields.php
index 7c1bd4f..2c6f350 100644
--- a/ajax/invoices/temporary/product/hasProductCustomFields.php
+++ b/ajax/invoices/temporary/product/hasProductCustomFields.php
@@ -17,6 +17,6 @@ function ($productId) {
 
         return count($fields);
     },
-    array('productId'),
+    ['productId'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/product/parseProductToArticle.php b/ajax/invoices/temporary/product/parseProductToArticle.php
index 9719930..5b5e8ce 100644
--- a/ajax/invoices/temporary/product/parseProductToArticle.php
+++ b/ajax/invoices/temporary/product/parseProductToArticle.php
@@ -67,8 +67,8 @@ function ($productId, $attributes, $user) {
             QUI\System\Log::write($Exception->getMessage());
         }
 
-        return array();
+        return [];
     },
-    array('productId', 'attributes', 'user'),
+    ['productId', 'attributes', 'user'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/product/summary.php b/ajax/invoices/temporary/product/summary.php
index f84a9b1..78e3de3 100644
--- a/ajax/invoices/temporary/product/summary.php
+++ b/ajax/invoices/temporary/product/summary.php
@@ -15,7 +15,7 @@
     function ($article) {
         $article = json_decode($article, true);
 
-        $Brutto = new QUI\ERP\User(array(
+        $Brutto = new QUI\ERP\User([
             'id'        => 'BRUTTO',
             'country'   => '',
             'username'  => '',
@@ -23,7 +23,7 @@ function ($article) {
             'lastname'  => '',
             'lang'      => QUI::getLocale()->getCurrent(),
             'isCompany' => 0
-        ));
+        ]);
 
         $Brutto->setAttribute(
             'quiqqer.erp.isNettoUser',
@@ -38,6 +38,6 @@ function ($article) {
 
         return $Article->toArray();
     },
-    array('article'),
+    ['article'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/save.php b/ajax/invoices/temporary/save.php
index 014362f..e984afe 100644
--- a/ajax/invoices/temporary/save.php
+++ b/ajax/invoices/temporary/save.php
@@ -31,6 +31,6 @@ function ($invoiceId, $data) {
             QUI::getLocale()->get('quiqqer/invoice', 'message.invoice.save.successfully')
         );
     },
-    array('invoiceId', 'data'),
+    ['invoiceId', 'data'],
     'Permission::checkAdminUser'
 );
diff --git a/ajax/invoices/temporary/unlock.php b/ajax/invoices/temporary/unlock.php
index 3faaad6..9102626 100644
--- a/ajax/invoices/temporary/unlock.php
+++ b/ajax/invoices/temporary/unlock.php
@@ -14,8 +14,7 @@
     function ($invoiceId) {
         $Invoices = QUI\ERP\Accounting\Invoice\Handler::getInstance();
         $Invoice  = $Invoices->getTemporaryInvoice($invoiceId);
-
     },
-    array('invoiceId'),
+    ['invoiceId'],
     'Permission::checkAdminUser'
 );
diff --git a/bin/backend/controls/panels/Invoice.css b/bin/backend/controls/panels/Invoice.css
index 9447bda..33cb5cf 100644
--- a/bin/backend/controls/panels/Invoice.css
+++ b/bin/backend/controls/panels/Invoice.css
@@ -5,6 +5,7 @@
 .journal-grid-amount {
     text-align: right !important;
     padding-right: 5px;
+    padding-left: 0 !important;
 }
 
 .journal-grid-cancel {
diff --git a/bin/backend/controls/panels/Invoice.js b/bin/backend/controls/panels/Invoice.js
index 057e788..f68777a 100644
--- a/bin/backend/controls/panels/Invoice.js
+++ b/bin/backend/controls/panels/Invoice.js
@@ -266,8 +266,8 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Invoice', [
                         'package/quiqqer/invoice/bin/backend/controls/panels/Journal.Payments'
                     ], function (Payments) {
                         new Payments({
-                            invoiceId: self.getAttribute('data').id,
-                            events   : {
+                            hash  : self.getAttribute('data').hash,
+                            events: {
                                 onLoad: resolve
                             }
                         }).inject(Container);
diff --git a/bin/backend/controls/panels/Journal.Payments.js b/bin/backend/controls/panels/Journal.Payments.js
index a9b6577..a4e2797 100644
--- a/bin/backend/controls/panels/Journal.Payments.js
+++ b/bin/backend/controls/panels/Journal.Payments.js
@@ -11,10 +11,11 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Journal.Payments', [
     'qui/controls/windows/Confirm',
     'controls/grid/Grid',
     'package/quiqqer/invoice/bin/Invoices',
+    'package/quiqqer/payment-transactions/bin/backend/Transactions',
     'Locale',
     'Ajax'
 
-], function (QUI, QUIControl, QUIConfirm, Grid, Invoices, QUILocale, QUIAjax) {
+], function (QUI, QUIControl, QUIConfirm, Grid, Invoices, Transactions, QUILocale, QUIAjax) {
     "use strict";
 
     var lg = 'quiqqer/invoice';
@@ -30,7 +31,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Journal.Payments', [
         ],
 
         options: {
-            invoiceId: false
+            hash: false
         },
 
         initialize: function (options) {
@@ -58,34 +59,23 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Journal.Payments', [
 
         /**
          * Refresh the data and the display
+         *
+         * @return {Promise}
          */
         refresh: function () {
             var self = this;
 
-            Invoices.get(this.getAttribute('invoiceId')).then(function (result) {
+            return Transactions.getTransactionsByHash(this.getAttribute('hash')).then(function (result) {
                 var payments = [];
 
-                try {
-                    payments = JSON.decode(result.paid_data);
-                } catch (e) {
-                }
-
-                if (!payments) {
-                    payments = [];
-                }
-
-                var AddButton = self.$Grid.getButtons().filter(function (Button) {
-                    return Button.getAttribute('name') === 'add';
-                })[0];
-
-                if (result.paid_status !== 1) {
-                    AddButton.enable();
-                } else {
-                    AddButton.disable();
+                for (var i = 0, len = result.length; i < len; i++) {
+                    payments.push({
+                        date   : result[i].date,
+                        amount : result[i].amount,
+                        payment: result[i].payment
+                    });
                 }
 
-                return payments;
-            }).then(function (payments) {
                 return new Promise(function (resolve) {
                     QUIAjax.get('package_quiqqer_invoice_ajax_invoices_payments_format', function (data) {
                         self.$Grid.setData({
@@ -99,6 +89,18 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Journal.Payments', [
                         payments : JSON.encode(payments)
                     });
                 });
+            }).then(function () {
+                return Invoices.get(self.getAttribute('hash'));
+            }).then(function (result) {
+                var AddButton = self.$Grid.getButtons().filter(function (Button) {
+                    return Button.getAttribute('name') === 'add';
+                })[0];
+
+                if (result.paid_status !== 1) {
+                    AddButton.enable();
+                } else {
+                    AddButton.disable();
+                }
             });
         },
 
@@ -133,13 +135,13 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Journal.Payments', [
                     header   : QUILocale.get(lg, 'journal.payments.date'),
                     dataIndex: 'date',
                     dataType : 'date',
-                    width    : 100
+                    width    : 160
                 }, {
                     header   : QUILocale.get(lg, 'journal.payments.amount'),
                     dataIndex: 'amount',
-                    dataType : 'number',
+                    dataType : 'string',
                     className: 'journal-grid-amount',
-                    width    : 200
+                    width    : 160
                 }, {
                     header   : QUILocale.get(lg, 'journal.payments.paymentMethod'),
                     dataIndex: 'payment',
diff --git a/bin/backend/controls/panels/Journal.js b/bin/backend/controls/panels/Journal.js
index 73a35d2..66e4f11 100644
--- a/bin/backend/controls/panels/Journal.js
+++ b/bin/backend/controls/panels/Journal.js
@@ -493,8 +493,9 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Journal', [
             });
 
             this.$Grid.addEvents({
-                onRefresh: this.refresh,
-                onClick  : this.$refreshButtonStatus
+                onRefresh : this.refresh,
+                onClick   : this.$refreshButtonStatus,
+                onDblClick: this.$onClickOpenInvoice
             });
 
 
diff --git a/locale.xml b/locale.xml
index 7e0b101..1478959 100644
--- a/locale.xml
+++ b/locale.xml
@@ -812,8 +812,8 @@
             <en><![CDATA[Amount]]></en>
         </locale>
         <locale name="journal.payments.paymentMethod">
-            <de><![CDATA[Bezahlmethoden]]></de>
-            <en><![CDATA[Payment methode]]></en>
+            <de><![CDATA[Bezahlmethode]]></de>
+            <en><![CDATA[Payment method]]></en>
         </locale>
 
         <locale name="dialog.print.title">
diff --git a/src/QUI/ERP/Accounting/Invoice/Handler.php b/src/QUI/ERP/Accounting/Invoice/Handler.php
index 47a2fe1..60aa029 100644
--- a/src/QUI/ERP/Accounting/Invoice/Handler.php
+++ b/src/QUI/ERP/Accounting/Invoice/Handler.php
@@ -260,7 +260,7 @@ public function countTemporaryInvoices($queryParams = [])
      * @param string $id - ID of the Invoice or InvoiceTemporary
      * @return InvoiceTemporary|Invoice
      *
-     * @throws
+     * @throws QUI\Exception
      */
     public function get($id)
     {
@@ -302,7 +302,7 @@ public function getInvoiceByHash($hash)
             'select' => 'id',
             'from'   => self::invoiceTable(),
             'where'  => [
-                'id' => $hash
+                'hash' => $hash
             ],
             'limit'  => 1
         ]);
-- 
GitLab