From 381be8fa7b11fcbc2b61b7ba3a55e3a8d78e6d2d Mon Sep 17 00:00:00 2001
From: Henning Leutz <leutz@pcsg.de>
Date: Thu, 17 Mar 2022 14:28:56 +0100
Subject: [PATCH] fix: create Credit Note -> consider all prices

---
 ajax/invoices/createCreditNote.php         |  4 +-
 src/QUI/ERP/Accounting/Invoice/Invoice.php | 44 ++++++++++++++++++----
 2 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/ajax/invoices/createCreditNote.php b/ajax/invoices/createCreditNote.php
index 4da8332..405e4a0 100644
--- a/ajax/invoices/createCreditNote.php
+++ b/ajax/invoices/createCreditNote.php
@@ -18,9 +18,9 @@ function ($invoiceId, $invoiceData) {
             $invoiceData = '';
         }
 
-        $invoiceData = \json_decode($invoiceData, true);
+        $invoiceData = json_decode($invoiceData, true);
 
-        if (!\is_array($invoiceData)) {
+        if (!is_array($invoiceData)) {
             $invoiceData = [];
         }
 
diff --git a/src/QUI/ERP/Accounting/Invoice/Invoice.php b/src/QUI/ERP/Accounting/Invoice/Invoice.php
index 34caa27..5a6a489 100644
--- a/src/QUI/ERP/Accounting/Invoice/Invoice.php
+++ b/src/QUI/ERP/Accounting/Invoice/Invoice.php
@@ -8,13 +8,13 @@
 
 use IntlDateFormatter;
 use QUI;
-use QUI\ERP\Customer\CustomerFiles;
-use QUI\Permissions\Permission;
-use QUI\ERP\Money\Price;
 use QUI\ERP\Accounting\ArticleListUnique;
-use QUI\ERP\Accounting\Payments\Transactions\Transaction;
 use QUI\ERP\Accounting\Invoice\Utils\Invoice as InvoiceUtils;
+use QUI\ERP\Accounting\Payments\Transactions\Transaction;
+use QUI\ERP\Customer\CustomerFiles;
+use QUI\ERP\Money\Price;
 use QUI\ERP\Output\Output as ERPOutput;
+use QUI\Permissions\Permission;
 
 use function array_key_exists;
 use function class_exists;
@@ -24,6 +24,7 @@
 use function json_decode;
 use function json_encode;
 use function str_replace;
+use function strip_tags;
 use function strtotime;
 use function time;
 
@@ -873,9 +874,38 @@ public function createCreditNote($PermissionUser = null, $globalProcessId = fals
         $ArticleList->clear();
         $ArticleList->setCurrency($this->getCurrency());
 
+        $priceKeyList = [
+            'price',
+            'basisPrice',
+            'nettoPriceNotRounded',
+            'sum',
+            'nettoSum',
+            'nettoSubSum',
+            'nettoPrice',
+            'nettoBasisPrice',
+            'unitPrice',
+        ];
+
         foreach ($articles as $Article) {
-            $article              = $Article->toArray();
-            $article['unitPrice'] = $article['unitPrice'] * -1;
+            $article = $Article->toArray();
+
+            foreach ($priceKeyList as $priceKey) {
+                if (isset($article[$priceKey])) {
+                    $article[$priceKey] = $article[$priceKey] * -1;
+                }
+            }
+
+            if (isset($article['calculated'])) {
+                foreach ($priceKeyList as $priceKey) {
+                    if (isset($article['calculated'][$priceKey])) {
+                        $article['calculated'][$priceKey] = $article['calculated'][$priceKey] * -1;
+                    }
+                }
+            }
+
+            if (isset($article['calculated']['vatArray'])) {
+                $article['calculated']['vatArray']['sum'] = $article['calculated']['vatArray']['sum'] * -1;
+            }
 
             $Clone = new QUI\ERP\Accounting\Article($article);
             $ArticleList->addArticle($Clone);
@@ -1308,7 +1338,7 @@ public function addComment(string $comment, $PermissionUser = null)
             $PermissionUser
         );
 
-        $comment = \strip_tags(
+        $comment = strip_tags(
             $comment,
             '<div><span><pre><p><br><hr>
             <ul><ol><li><dl><dt><dd><strong><em><b><i><u>
-- 
GitLab