Skip to content
Code-Schnipsel Gruppen Projekte
Bestätigt Commit b85192a7 erstellt von Henning Leutz's avatar Henning Leutz 🥋
Dateien durchsuchen

fix: send an invoice via order mail - complete test

Übergeordneter 7826cf72
Keine zugehörigen Branchen gefunden
Keine zugehörigen Tags gefunden
2 Merge Requests!4feat: new settings,!2feat: new settings
......@@ -4,10 +4,13 @@
* This file contains package_quiqqer_order-guestorder_ajax_frontend_setCustomerData
*/
use QUI\ERP\Accounting\Invoice\Invoice;
use QUI\ERP\Accounting\Invoice\InvoiceTemporary;
use QUI\ERP\Accounting\Invoice\Utils\Invoice as InvoiceUtils;
use QUI\ERP\Order\Guest\GuestOrder;
use QUI\ERP\Order\Guest\GuestOrderUser;
use QUI\ERP\Order\Handler;
use QUI\System\Log;
QUI::$Ajax->registerFunction(
'package_quiqqer_order-guestorder_ajax_frontend_submitCustomerData',
......@@ -18,17 +21,23 @@ function ($orderHash, $data) {
$Guest = new GuestOrderUser();
if (empty($data['order-guest-email'])) {
throw new QUI\Exception('Missing E-Mail');
throw new QUI\Exception(
QUI::getLocale()->get('quiqqer/order-guestorder', 'message.guest.sendInvoice.error')
);
}
// this is only for anonymous orders
if ($Customer->getId() !== $Guest->getId()) {
return;
throw new QUI\Exception(
QUI::getLocale()->get('quiqqer/order-guestorder', 'message.guest.sendInvoice.error')
);
}
// check customer mail
if ($Customer->getAttribute('email') !== $data['order-guest-email']) {
throw new QUI\Exception('You are not allowed to edit this order');
throw new QUI\Exception(
QUI::getLocale()->get('quiqqer/order-guestorder', 'message.guest.sendInvoice.error')
);
}
// set address data
......@@ -89,15 +98,32 @@ function ($orderHash, $data) {
// all is fine, we can create the users
$email = $Customer->getAttribute('email');
$message = '<p>' . QUI::getLocale()->get(
'quiqqer/order-guestorder',
'message.guest.sendInvoice.thanks'
) . '</p>';
try {
$User = QUI::getUsers()->get($Customer->getId());
if (!$User->isActive()) {
if ($User instanceof GuestOrderUser && !empty($data['guest-order-create-account'])) {
$User = GuestOrder::triggerFrontendUsersRegistration($email);
$message .= '<p>' . QUI::getLocale()->get(
'quiqqer/order-guestorder',
'message.guest.sendInvoice.accountCreation'
) . '</p>';
// frontend users don't set a password
GuestOrder::sendNewPasswordMail($User);
} else {
$User = GuestOrder::createGuestAccount($email, $Address);
}
} catch (QUI\Exception $exception) {
$User = GuestOrder::createGuestAccount($email, $Address);
Log::addNotice($exception->getMessage());
throw new QUI\Exception(
QUI::getLocale()->get('quiqqer/order-guestorder', 'message.guest.sendInvoice.error')
);
}
$Order->setCustomer($User);
......@@ -105,10 +131,9 @@ function ($orderHash, $data) {
$Order->save(QUI::getUsers()->getSystemUser());
$guestInvoicing = QUI::getPackage('quiqqer/order-guestorder')->getConfig()->getValue(
'guestorder',
'invoicing_for_guests'
);
$guestInvoicing = QUI::getPackage('quiqqer/order-guestorder')
->getConfig()
->getValue('guestorder', 'invoicing_for_guests');
if ($guestInvoicing) {
if ($Order->hasInvoice()) {
......@@ -117,8 +142,21 @@ function ($orderHash, $data) {
$Invoice = $Order->createInvoice(QUI::getUsers()->getSystemUser());
}
$Invoice->sendTo($email);
if ($Invoice instanceof InvoiceTemporary) {
$Invoice = $Invoice->post(QUI::getUsers()->getSystemUser());
}
if ($Invoice instanceof Invoice) {
$Invoice->sendTo($email);
}
$message .= '<p>' . QUI::getLocale()->get(
'quiqqer/order-guestorder',
'message.guest.sendInvoice.invoiceSuccessful'
) . '</p>';
}
return $message;
},
['orderHash', 'data']
);
......@@ -57,7 +57,7 @@ define('package/quiqqer/order-guestorder/bin/frontend/controls/MissingAddressDat
(() => {
Container.setStyle('opacity', 0);
Container.setStyle('display', 'inline');
Container.setStyle('display', 'inline-block');
this.getElm().getElement('.customer-data--spinner').destroy();
......@@ -74,11 +74,32 @@ define('package/quiqqer/order-guestorder/bin/frontend/controls/MissingAddressDat
const Form = this.getElm().getElement('form');
const formData = QUIFormUtils.getFormData(Form);
const requiredFields = Form.getElements('[required]');
let i, len, Node;
for (i = 0, len = requiredFields.length; i < len; i++) {
Node = requiredFields[i];
if ('reportValidity' in Node) {
Node.reportValidity();
}
if ('checkValidity' in Node) {
if (!Node.checkValidity()) {
return;
}
}
}
this.Loader.show();
QUIAjax.post('package_quiqqer_order-guestorder_ajax_frontend_submitCustomerData', () => {
QUIAjax.post('package_quiqqer_order-guestorder_ajax_frontend_submitCustomerData', (message) => {
this.getElm().set('html', '');
// @todo message
new Element('div', {
'class': 'content-message-success',
html: message
}).inject(this.getElm());
this.Loader.hide();
}, {
......@@ -87,6 +108,14 @@ define('package/quiqqer/order-guestorder/bin/frontend/controls/MissingAddressDat
data: JSON.encode(formData),
onError: (err) => {
console.error(err.getMessage());
this.getElm().set('html', '');
new Element('div', {
'class': 'content-message-error',
html: err.getMessage()
}).inject(this.getElm());
this.Loader.hide();
}
});
......
......@@ -256,6 +256,41 @@
You will be automatically redirected to the order page in a few seconds.
]]></en>
</locale>
<locale name="message.guest.sendInvoice.thanks">
<de><![CDATA[Vielen Dank! Deine Daten wurden erfolgreich gespeichert.]]></de>
<en><![CDATA[Thank you very much! Your data has been successfully saved.]]></en>
</locale>
<locale name="message.guest.sendInvoice.invoiceSuccessful">
<de><![CDATA[
Eine Rechnung wurde an deine E-Mail-Adresse gesendet. Bitte überprüfe dein Postfach.
]]></de>
<en><![CDATA[
An invoice has been sent to your email address. Please check your mailbox.
]]></en>
</locale>
<locale name="message.guest.sendInvoice.accountCreation">
<de><![CDATA[
Herzlichen Dank für die Erstellung deines Accounts in unserem Shop! Wir haben dir eine E-Mail gesendet,
damit du deine Account-Registrierung abschließen kannst.
Bitte überprüfe dein Postfach, um den Prozess abzuschließen
]]></de>
<en><![CDATA[
Thank you for creating your account in our store! We have sent you an e-mail so that you can complete your account registration.
Please check your inbox to complete the process.
]]></en>
</locale>
<locale name="message.guest.sendInvoice.error">
<de><![CDATA[
Leider ist ein Fehler aufgetreten und die Aktion konnte nicht durchgeführt werden.
Wenden Sie sich bitte an den Shopbetreiber
]]></de>
<en><![CDATA[
Unfortunately, an error occurred and the action could not be executed.
Please contact the store operator
]]></en>
</locale>
</groups>
<groups name="quiqqer/order-guestorder" datatype="php">
......
.quiqqer-order-customerData-comment {
.guest-order-address {
margin: 0 auto;
max-width: 700px;
}
.guest-order-address form {
width: 100%;
}
.guest-order-address .quiqqer-order-customerData-comment {
display: none;
}
.quiqqer-order-customerData header {
.guest-order-address .quiqqer-order-customerData header {
display: none;
}
.quiqqer-order-customerData-container {
.guest-order-address .quiqqer-order-customerData-container {
margin-bottom: 20px;
}
.quiqqer-order-customerData-display {
.guest-order-address .quiqqer-order-customerData-display {
display: none !important;
}
.quiqqer-order-customerData-edit {
.guest-order-address .quiqqer-order-customerData-edit {
display: inline !important;
margin-top: 0;
}
.guest-order-address .quiqqer-order-customerData-container .quiqqer-order-customerData {
margin-right: 0;
max-width: 100%;
width: 100%;
}
.quiqqer-order-step-checkout-notice {
display: inline-block;
margin-bottom: 20px;
}
.guest-order-address [name="customer-data-save"] {
display: block;
margin: 0 auto;
width: 200px;
}
\ No newline at end of file
......@@ -6,6 +6,15 @@
<form class="customer-data" style="display: none">
{$CustomerData->create()}
{if $showAccountCreation}
<div class="quiqqer-order-step-checkout-notice">
<label>
<input type="checkbox" name="guest-order-create-account"/>
{locale group="quiqqer/order-guestorder" var="order.create.account.message"}
</label>
</div>
{/if}
<input type="hidden" name="order-hash" value="{$orderHash}"/>
<input type="hidden" name="order-guest-email" value="{$email}"/>
<input type="button" name="customer-data-save" value="Speichern"/>
......
......@@ -43,12 +43,16 @@ public function getBody(): string
'Order' => $Order,
'businessTypeIsChangeable' => false
]);
$Customer = $Order->getCustomer();
$Guest = new QUI\ERP\Order\Guest\GuestOrderUser();
$Engine->assign([
'orderHash' => $Order->getHash(),
'email' => $Order->getCustomer()->getAttribute('email'),
'missing' => $missing,
'CustomerData' => $CustomerData
'CustomerData' => $CustomerData,
'showAccountCreation' => $Customer->getId() === $Guest->getId()
]);
return $Engine->fetch(dirname(__FILE__) . '/MissingAddressData.html');
......
......@@ -10,8 +10,6 @@
use QUI\ERP\Order\Utils\OrderProcessSteps;
use QUI\Exception;
use QUI\FrontendUsers\Exception\UserAlreadyExistsException;
use QUI\Interfaces\Users\User;
use QUI\Mail\Mailer;
use QUI\Rewrite;
use QUI\Smarty\Collector;
use Symfony\Component\HttpFoundation\RedirectResponse;
......@@ -573,7 +571,7 @@ protected static function onRequestUserCreation()
$Order->setCustomer($User);
$Order->save(QUI::getUsers()->getSystemUser());
self::sendNewPasswordMail($User);
GuestOrder::sendNewPasswordMail($User);
self::setSiteContent(
'<div class="messages message-success">' .
......@@ -589,7 +587,7 @@ protected static function onRequestUserCreation()
return;
}
self::sendNewPasswordMail($User);
GuestOrder::sendNewPasswordMail($User);
self::setSiteContent(
'<div class="messages message-success">' .
......@@ -598,48 +596,6 @@ protected static function onRequestUserCreation()
);
}
/**
* Sends a new password email to the specified user
*
* @param User $User The user object to send the email to
*
* @return void
* @throws Exception
* @throws \PHPMailer\PHPMailer\Exception
*/
protected static function sendNewPasswordMail(QUI\Interfaces\Users\User $User)
{
// password mail and activation mail
$newPassword = QUI\Security\Password::generateRandom();
$User->setPassword($newPassword, QUI::getUsers()->getSystemUser());
$User->setAttribute('quiqqer.set.new.password', true);
$User->save(QUI::getUsers()->getSystemUser());
if (!$User->isActive()) {
$User->activate(false, QUI::getUsers()->getSystemUser());
}
// send mail
$email = $User->getAttribute('email');
$Mailer = new Mailer();
$Mailer->addRecipient($email);
$Mailer->setSubject(
QUI::getLocale()->get('quiqqer/quiqqer', 'mails.user.new_password.subject')
);
$body = QUI::getLocale()->get('quiqqer/quiqqer', 'mails.user.new_password.body', [
'name' => $User->getName(),
'password' => $newPassword,
'forceNewMsg' => QUI::getLocale()->get('quiqqer/quiqqer', 'mails.user.new_password.body.force_new')
]);
$Mailer->setBody($body);
$Mailer->send();
}
/**
* Handle the request for invoice creation.
*
......
......@@ -5,6 +5,7 @@
use Exception;
use QUI;
use QUI\FrontendUsers\Exception\UserAlreadyExistsException;
use QUI\Mail\Mailer;
use QUI\Projects\Project;
use QUI\System\Log;
use QUI\Users\Address;
......@@ -250,4 +251,47 @@ public static function createGuestAccount(string $email, QUI\Users\Address $Addr
return $User;
}
/**
* Sends a new password email to the specified user
*
* @param \QUI\Interfaces\Users\User $User The user object to send the email to
*
* @return void
* @throws \QUI\Exception
* @throws \PHPMailer\PHPMailer\Exception
*/
public static function sendNewPasswordMail(QUI\Interfaces\Users\User $User)
{
// password mail and activation mail
$newPassword = QUI\Security\Password::generateRandom();
$User->setPassword($newPassword, QUI::getUsers()->getSystemUser());
$User->setAttribute('quiqqer.set.new.password', true);
$User->save(QUI::getUsers()->getSystemUser());
if (!$User->isActive()) {
$User->activate(false, QUI::getUsers()->getSystemUser());
}
// send mail
$email = $User->getAttribute('email');
$Mailer = new Mailer();
$Mailer->addRecipient($email);
$Mailer->setSubject(
QUI::getLocale()->get('quiqqer/quiqqer', 'mails.user.new_password.subject')
);
$body = QUI::getLocale()->get('quiqqer/quiqqer', 'mails.user.new_password.body', [
'name' => $User->getName(),
'password' => $newPassword,
'forceNewMsg' => QUI::getLocale()->get('quiqqer/quiqqer', 'mails.user.new_password.body.force_new')
]);
$Mailer->setBody($body);
$Mailer->send();
}
}
0% Lade oder .
You are about to add 0 people to the discussion. Proceed with caution.
Bearbeitung dieser Nachricht zuerst beenden!
Bitte registrieren oder zum Kommentieren