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