From eb22505e0f315f18573a01afc802793ad412411f Mon Sep 17 00:00:00 2001
From: Henning Leutz <leutz@pcsg.de>
Date: Thu, 22 Aug 2019 08:43:44 +0200
Subject: [PATCH] feat: mail information about an incoming order

---
 locale.xml                                    |  63 ++++++++++-
 settings.xml                                  |  14 +++
 src/QUI/ERP/Order/EventHandling.php           |   4 +
 src/QUI/ERP/Order/Mail.php                    | 107 +++++++++++++++++-
 .../MailTemplates/orderConfirmationAdmin.html |  36 ++++++
 5 files changed, 222 insertions(+), 2 deletions(-)
 create mode 100644 src/QUI/ERP/Order/MailTemplates/orderConfirmationAdmin.html

diff --git a/locale.xml b/locale.xml
index 97895b36..b8c1c286 100644
--- a/locale.xml
+++ b/locale.xml
@@ -607,7 +607,7 @@
         </locale>
         <locale name="order.settings.order.sendOrderConfirmationToAdmin">
             <de><![CDATA[Bestellbestätigung (Administrator)]]></de>
-            <en><![CDATA[Confirmation of order (Administrator)]]></en>
+            <en><![CDATA[Copy of order (Administrator)]]></en>
         </locale>
         <locale name="order.settings.order.sendOrderConfirmationToAdmin.description">
             <de><![CDATA[
@@ -619,6 +619,18 @@
             The administrator is entered here as a BCC e-mail if an order confirmation has been sent.
             ]]></en>
         </locale>
+        <locale name="order.settings.order.sendAdminOrderConfirmation">
+            <de><![CDATA[Bestellinformation für den Administrator]]></de>
+            <en><![CDATA[Order information for the administrator]]></en>
+        </locale>
+        <locale name="order.settings.order.sendAdminOrderConfirmation.description">
+            <de><![CDATA[
+            Diese Mail ist eine Information über eine eingehende Bestellung. Es ist keine Kopie der Bestellbestätigung.
+            ]]></de>
+            <en><![CDATA[
+            This mail is an information about an incoming order. It is not a copy of the order confirmation.
+            ]]></en>
+        </locale>
 
         <locale name="order.settings.autoInvoicePost">
             <de><![CDATA[Rechnung automatisch buchen]]></de>
@@ -872,6 +884,55 @@
             <de><![CDATA[]]></de>
             <en><![CDATA[]]></en>
         </locale>
+        <locale name="message.order.missing.customer.mail">
+            <de><![CDATA[
+                Der Kunde [customerId] hat keine E-Mail hinterlegt.
+                Es konnte keine Bestellbestätigung für [orderId] versendet werden.
+            ]]></de>
+            <en><![CDATA[
+                The customer [customerId] has not set an e-mail.
+                No order confirmation could be sent for [orderId].
+            ]]></en>
+        </locale>
+        <locale name="message.order.missing.admin.mail">
+            <de><![CDATA[
+            Es wurde keine Administrator E-Mail Adresse hinterlegt.
+            Es konnte keine Bestellbestätigungs Information versendet werden.
+            ]]></de>
+            <en><![CDATA[
+            No administrator e-mail address has been set up.
+            No order confirmation information could be sent.
+            ]]></en>
+        </locale>
+
+        <locale name="order.confirmation.admin.subject">
+            <de><![CDATA[Es wurde eine Bestellung aufgegeben: [orderId]]]></de>
+            <en><![CDATA[An order was placed: [orderId]]]></en>
+        </locale>
+        <locale name="order.confirmation.admin.body" html="true">
+            <de><![CDATA[
+            <h2>Bestelldetails</h2>
+            Bestellnummer: [orderId]<br />
+            Benutzer-ID: [userId]<br />
+            Benutzername: [username]<br />
+            ]]></de>
+            <en><![CDATA[
+            <h2>Order details</h2>
+            Order ID: [orderId]<br />
+            User ID: [userId]<br />
+            Username: [username]<br />
+            ]]></en>
+        </locale>
+        <locale name="exception.order.confirmation.admin">
+            <de><![CDATA[
+            Leider ist ein Fehler aufgetreten beim versenden einer Bestellstätigung für den Administrator.
+            Bestellung: [orderId]; Fehler: [message]
+            ]]></de>
+            <en><![CDATA[
+            Unfortunately an error occurred when sending an order confirmation for the administrator.
+            Order: [orderId]; Error: [message]
+            ]]></en>
+        </locale>
     </groups>
 
     <groups name="quiqqer/order" datatype="js">
diff --git a/settings.xml b/settings.xml
index 2f349ca9..9b111c87 100644
--- a/settings.xml
+++ b/settings.xml
@@ -28,6 +28,10 @@
                     <type><![CDATA[bool]]></type>
                     <defaultvalue><![CDATA[1]]></defaultvalue>
                 </conf>
+                <conf name="sendAdminOrderConfirmation">
+                    <type><![CDATA[bool]]></type>
+                    <defaultvalue><![CDATA[1]]></defaultvalue>
+                </conf>
             </section>
 
             <section name="paymentsChangeable"/>
@@ -113,6 +117,16 @@
                             </description>
                         </input>
 
+                        <input type="checkbox" conf="order.sendAdminOrderConfirmation">
+                            <text>
+                                <locale group="quiqqer/order" var="order.settings.order.sendAdminOrderConfirmation"/>
+                            </text>
+                            <description>
+                                <locale group="quiqqer/order"
+                                        var="order.settings.order.sendAdminOrderConfirmation.description"/>
+                            </description>
+                        </input>
+
                         <input type="text" conf="order.prefix">
                             <text>
                                 <locale group="quiqqer/order" var="order.settings.order.prefix"/>
diff --git a/src/QUI/ERP/Order/EventHandling.php b/src/QUI/ERP/Order/EventHandling.php
index a1dd29e7..6fbd8b59 100644
--- a/src/QUI/ERP/Order/EventHandling.php
+++ b/src/QUI/ERP/Order/EventHandling.php
@@ -261,6 +261,10 @@ public static function onQuiqqerInvoiceTemporaryInvoicePostEnd(
      */
     public static function onQuiqqerOrderCreated(Order $Order)
     {
+        if (Settings::getInstance()->get('order', 'sendAdminOrderConfirmation')) {
+            Mail::sendAdminOrderConfirmationMail($Order);
+        }
+
         if (Settings::getInstance()->get('order', 'sendOrderConfirmation')) {
             Mail::sendOrderConfirmationMail($Order);
         }
diff --git a/src/QUI/ERP/Order/Mail.php b/src/QUI/ERP/Order/Mail.php
index 08b93cf3..4ffd87ec 100644
--- a/src/QUI/ERP/Order/Mail.php
+++ b/src/QUI/ERP/Order/Mail.php
@@ -16,7 +16,7 @@
 class Mail
 {
     /**
-     * confirmation of order mail
+     * confirmation mail for the customer
      *
      * @param Order $Order
      * @throws QUI\Exception
@@ -107,4 +107,109 @@ public static function sendOrderConfirmationMail(Order $Order)
 
         $Mailer->send();
     }
+
+    /**
+     * confirmation mail for the admin
+     *
+     * @param Order $Order
+     */
+    public static function sendAdminOrderConfirmationMail(Order $Order)
+    {
+        $email = QUI::conf('mail', 'admin_mail');
+
+        if (empty($email)) {
+            QUI\System\Log::addAlert(
+                QUI::getLocale()->get('quiqqer/order', 'message.order.missing.admin.mail')
+            );
+
+            return;
+        }
+
+        // create order data
+        $OrderControl = new QUI\ERP\Order\Controls\Order\Order([
+            'orderHash' => $Order->getHash(),
+            'template'  => 'OrderLikeBasket'
+        ]);
+
+        $Address  = null;
+        $Customer = $Order->getCustomer();
+
+        $user = $Customer->getName();
+        $user = \trim($user);
+
+        if (empty($user)) {
+            $Address = $Customer->getAddress();
+            $user    = $Address->getName();
+        }
+
+        // mail
+        $Mailer = QUI::getMailManager()->getMailer();
+        $Mailer->addRecipient($email);
+
+        $Mailer->setSubject(
+            QUI::getLocale()->get('quiqqer/order', 'order.confirmation.admin.subject', [
+                'orderId' => $Order->getPrefixedId()
+            ])
+        );
+
+        try {
+            $Engine = QUI::getTemplateManager()->getEngine();
+            $Order  = $OrderControl->getOrder();
+
+            $Articles = $Order->getArticles()->toUniqueList();
+            $Articles->hideHeader();
+        } catch (QUI\Exception $Exception) {
+            QUI\System\Log::addAlert(
+                QUI::getLocale()->get('quiqqer/order', 'exception.order.confirmation.admin', [
+                    'orderId' => $Order->getPrefixedId(),
+                    'message' => $Exception->getMessage()
+                ])
+            );
+
+            return;
+        }
+
+
+        $Shipping        = null;
+        $DeliveryAddress = null;
+
+        if ($Order->getShipping()) {
+            $Shipping        = QUI\ERP\Shipping\Shipping::getInstance()->getShippingByObject($Order);
+            $DeliveryAddress = $Shipping->getAddress();
+        }
+
+        $Engine->assign([
+            'Shipping'        => $Shipping,
+            'DeliveryAddress' => $DeliveryAddress,
+            'InvoiceAddress'  => $Order->getInvoiceAddress(),
+            'Payment'         => $Order->getPayment(),
+
+            'Order'    => $Order,
+            'Articles' => $Articles,
+            'Address'  => $Address,
+
+            'message' => QUI::getLocale()->get('quiqqer/order', 'order.confirmation.admin.body', [
+                'orderId'  => $Order->getPrefixedId(),
+                'userId'   => $Customer->getId(),
+                'username' => $user
+            ])
+        ]);
+
+        $Mailer->setBody(
+            $Engine->fetch(\dirname(__FILE__).'/MailTemplates/orderConfirmationAdmin.html')
+        );
+
+        try {
+            $Mailer->send();
+        } catch (QUI\Exception $Exception) {
+            QUI\System\Log::addAlert(
+                QUI::getLocale()->get('quiqqer/order', 'exception.order.confirmation.admin', [
+                    'orderId' => $Order->getPrefixedId(),
+                    'message' => $Exception->getMessage()
+                ])
+            );
+
+            return;
+        }
+    }
 }
diff --git a/src/QUI/ERP/Order/MailTemplates/orderConfirmationAdmin.html b/src/QUI/ERP/Order/MailTemplates/orderConfirmationAdmin.html
new file mode 100644
index 00000000..b242baf7
--- /dev/null
+++ b/src/QUI/ERP/Order/MailTemplates/orderConfirmationAdmin.html
@@ -0,0 +1,36 @@
+{$message}
+
+{if $InvoiceAddress}
+<div class="">
+    <h4>{locale group="quiqqer/order" var="mail.order.confirmation.invoice.title"}</h4>
+    {$InvoiceAddress->render()}
+</div>
+{/if}
+
+{if $DeliveryAddress}
+<div class="">
+    <h4>{locale group="quiqqer/order" var="mail.order.confirmation.delivery.title"}</h4>
+    {$DeliveryAddress->render()}
+</div>
+{/if}
+
+<br/>
+<br/>
+
+{$Articles->renderForMail()}
+
+<div style="clear: both; width: 100%"></div>
+
+{if $Shipping}
+<div style="clear: both;">
+    <h4>{locale group="quiqqer/order" var="mail.order.confirmation.shipping.title"}</h4>
+    {$Shipping->getTitle()}
+</div>
+{/if}
+
+{if $Payment}
+<div class="">
+    <h4>{locale group="quiqqer/order" var="mail.order.confirmation.payment.title"}</h4>
+    {$Payment->getTitle()}
+</div>
+{/if}
-- 
GitLab