From 7826cf729dee89b2aae7bfa2868e7fca928a2b8d Mon Sep 17 00:00:00 2001
From: Henning Leutz <leutz@pcsg.de>
Date: Wed, 13 Sep 2023 12:55:25 +0200
Subject: [PATCH] feat: guest invoicing setting

---
 ajax/frontend/submitCustomerData.php     | 20 ++++++++++++++------
 locale.xml                               | 15 +++++++++++++++
 settings.xml                             | 14 ++++++++++++++
 src/QUI/ERP/Order/Guest/EventHandler.php | 11 ++++++++++-
 4 files changed, 53 insertions(+), 7 deletions(-)

diff --git a/ajax/frontend/submitCustomerData.php b/ajax/frontend/submitCustomerData.php
index 6747f11..fd313fc 100644
--- a/ajax/frontend/submitCustomerData.php
+++ b/ajax/frontend/submitCustomerData.php
@@ -104,13 +104,21 @@ function ($orderHash, $data) {
         $Order->setInvoiceAddress($Address);
         $Order->save(QUI::getUsers()->getSystemUser());
 
-        if ($Order->hasInvoice()) {
-            $Invoice = $Order->getInvoice();
-        } else {
-            $Invoice = $Order->createInvoice(QUI::getUsers()->getSystemUser());
-        }
 
-        $Invoice->sendTo($email);
+        $guestInvoicing = QUI::getPackage('quiqqer/order-guestorder')->getConfig()->getValue(
+            'guestorder',
+            'invoicing_for_guests'
+        );
+
+        if ($guestInvoicing) {
+            if ($Order->hasInvoice()) {
+                $Invoice = $Order->getInvoice();
+            } else {
+                $Invoice = $Order->createInvoice(QUI::getUsers()->getSystemUser());
+            }
+
+            $Invoice->sendTo($email);
+        }
     },
     ['orderHash', 'data']
 );
diff --git a/locale.xml b/locale.xml
index 4c599e5..e43baed 100644
--- a/locale.xml
+++ b/locale.xml
@@ -79,6 +79,21 @@
             ]]></en>
         </locale>
 
+        <locale name="settings.guest.invoicing_for_guests">
+            <de><![CDATA[Rechnungserstellung für Gäste]]></de>
+            <en><![CDATA[Invoicing for guests]]></en>
+        </locale>
+        <locale name="settings.guest.invoicing_for_guests.description">
+            <de><![CDATA[
+            Wenn diese Option aktiviert ist, haben Gäste oder anonyme Besteller die Möglichkeit, eine Rechnung für ihre Bestellung anzufordern.
+            In diesem Fall werden Benutzerkonten erstellt oder aktiviert, um die Rechnungsausstellung für den Benutzer zu ermöglichen.
+            ]]></de>
+            <en><![CDATA[
+            If this option is enabled, guests or anonymous orderers have the possibility,
+            request an invoice for their order. In this case, user accounts are created or activated, to enable invoicing for the user.
+            ]]></en>
+        </locale>
+
         <locale name="mail.link.create.account" html="true">
             <de><![CDATA[
             Wir möchten dich darauf hinweisen, dass die Registrierung eines Benutzerkontos bei uns nach wie vor möglich ist
diff --git a/settings.xml b/settings.xml
index ba39a09..2627376 100644
--- a/settings.xml
+++ b/settings.xml
@@ -11,6 +11,10 @@
                 <conf name="anonymous_max_sum">
                     <type><![CDATA[string]]></type>
                 </conf>
+                <conf name="invoicing_for_guests">
+                    <type><![CDATA[bool]]></type>
+                    <defaultvalue>1></defaultvalue>
+                </conf>
             </section>
         </config>
 
@@ -65,6 +69,16 @@
                                         var="settings.guest.anonymous_max_sum.description"/>
                             </description>
                         </input>
+
+                        <input conf="guestorder.invoicing_for_guests" type="checkbox">
+                            <text>
+                                <locale group="quiqqer/order-guestorder" var="settings.guest.invoicing_for_guests"/>
+                            </text>
+                            <description>
+                                <locale group="quiqqer/order-guestorder"
+                                        var="settings.guest.invoicing_for_guests.description"/>
+                            </description>
+                        </input>
                     </settings>
 
                 </category>
diff --git a/src/QUI/ERP/Order/Guest/EventHandler.php b/src/QUI/ERP/Order/Guest/EventHandler.php
index 4d84d2c..64f7f16 100644
--- a/src/QUI/ERP/Order/Guest/EventHandler.php
+++ b/src/QUI/ERP/Order/Guest/EventHandler.php
@@ -476,7 +476,16 @@ public static function extendMail(Collector $Collector, AbstractOrder $Order, $A
         $invoiceLink = GuestOrder::getInvoiceCreationLink($Order);
         $createAccountLink = GuestOrder::getAccountCreationLink($Order);
 
-        if (GuestOrder::isAnonymousOrder() && QUI::getPackageManager()->isInstalled('quiqqer/invoice')) {
+        $guestInvoicing = QUI::getPackage('quiqqer/order-guestorder')->getConfig()->getValue(
+            'guestorder',
+            'invoicing_for_guests'
+        );
+
+        if (
+            $guestInvoicing
+            && GuestOrder::isAnonymousOrder()
+            && QUI::getPackageManager()->isInstalled('quiqqer/invoice')
+        ) {
             // Anonyme Bestellung: Rechnungserzeugung oder Kundenkonto anlegen
             $html .= QUI::getLocale()->get('quiqqer/order-guestorder', 'mail.link.create.invoice', [
                 'link' => $invoiceLink
-- 
GitLab