Added initial order confirmation e-mail template #48
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace App\Mail;
|
||||
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||
use Illuminate\Mail\Mailable;
|
||||
use Illuminate\Mail\Mailables\Content;
|
||||
use Illuminate\Mail\Mailables\Address;
|
||||
use Illuminate\Mail\Mailables\Envelope;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class OrderConfirmation extends Mailable
|
||||
{
|
||||
use Queueable, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new message instance.
|
||||
*/
|
||||
public function __construct(public array $offer) {}
|
||||
|
||||
/**
|
||||
* Get the message envelope.
|
||||
*/
|
||||
public function envelope(): Envelope
|
||||
{
|
||||
return new Envelope(
|
||||
// TODO: get from settings
|
||||
from: new Address('buchhaltung@tooloop.de', 'Tooloop Multimedia'),
|
||||
bcc: [new Address('daniel.stock@tooloop.de', '<Daniel Stock')],
|
||||
subject: 'Auftragsbestätigung',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the message content definition.
|
||||
*/
|
||||
public function content(): Content
|
||||
{
|
||||
return new Content(
|
||||
view: 'mail.offers.confirmation',
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the attachments for the message.
|
||||
*
|
||||
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
|
||||
*/
|
||||
public function attachments(): array
|
||||
{
|
||||
return [];
|
||||
}
|
||||
}
|
||||
+13
-13
@@ -19,7 +19,7 @@
|
||||
|
||||
p {
|
||||
font-size: 16px;
|
||||
line-height: 20px;
|
||||
line-height: 24px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
<table width="636" cellpadding="0" cellspacing="0" border="0" class="container">
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<a href="https://www.tooloop.de@TrackLink"><img
|
||||
<a href="https://www.tooloop.de"><img
|
||||
src="http://newsletter.tooloop.de/uploads/tooloop-logo.png"
|
||||
width="128px" alt="Tooloop"></a>
|
||||
</td>
|
||||
@@ -197,7 +197,7 @@
|
||||
<td align="left" height="32" style="font-size:16px;">{{ $invoice['nr'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" height="32" style="font-size:16px;">Beteff</th>
|
||||
<th align="left" height="32" style="font-size:16px;">Betreff</th>
|
||||
<td align="left" height="32" style="font-size:16px;">{{ $invoice['title'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -255,44 +255,44 @@
|
||||
<table width="636" cellpadding="0" cellspacing="0" border="0" class="container">
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<p style="font-size: 14px; line-height: 15px;">
|
||||
<p style="font-size: 14px; line-height: 21px;">
|
||||
<a style="color: #00264D;" href="tel:+4982165079983">+49 821
|
||||
65079983</a>,
|
||||
<a href="https://www.tooloop.de@TrackLink" style="color: #00264D;"
|
||||
<a href="https://www.tooloop.de" style="color: #00264D;"
|
||||
target="_blank">www.tooloop.de</a>,
|
||||
<a style="color: #00264D;"
|
||||
href="mailto:info@tooloop.de">info@tooloop.de</a>
|
||||
</p>
|
||||
<p style="color: #999999;font-size: 14px; line-height: 15px;">Tooloop
|
||||
<p style="color: #999999;font-size: 14px; line-height: 21px;">Tooloop
|
||||
Multimedia Daniel
|
||||
Stock, Rehmstraße 4, 86161 Augsburg</p>
|
||||
<p>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://threema.id/KACDAD2H@TrackLink"><img
|
||||
href="https://threema.id/KACDAD2H"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_threema.png"
|
||||
width="32px" alt="Threema"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://matrix.to/#/@vollstock:matrix.org@TrackLink"><img
|
||||
href="https://matrix.to/#/@vollstock:matrix.org"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_matrix.png"
|
||||
width="32px" alt="Matrix"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://www.github.com/tooloop@TrackLink"><img
|
||||
href="https://www.github.com/tooloop"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_github.png"
|
||||
width="32px" alt="Github"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://www.linkedin.com/in/daniel-stock-749678123@TrackLink"><img
|
||||
href="https://www.linkedin.com/in/daniel-stock-749678123"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_linkedin.png"
|
||||
width="32px" alt="LinkedIn"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://www.xing.com/profile/Daniel_Stock9@TrackLink"><img
|
||||
href="https://www.xing.com/profile/Daniel_Stock9"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_xing.png"
|
||||
width="32px" alt="Xing"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://mastodon.social/@tooloop@TrackLink"><img
|
||||
href="https://mastodon.social/@tooloop"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_mastodon.png"
|
||||
width="32px" alt="Xing"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://www.instagram.com/tooloop.multimedia/@TrackLink"><img
|
||||
href="https://www.instagram.com/tooloop.multimedia/"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_instagram.png"
|
||||
width="32px" alt="Xing"></a>
|
||||
</p>
|
||||
@@ -0,0 +1,351 @@
|
||||
@php
|
||||
$fmt = new \IntlDateFormatter('de_DE', NULL, NULL);
|
||||
$fmt->setPattern('d. MMMM yyyy');
|
||||
@endphp
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html lang="de">
|
||||
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
|
||||
<title>Auftragsbestätigung</title>
|
||||
|
||||
<style type="text/css">
|
||||
* {
|
||||
font-family: system-ui, sans-serif;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #00264D;
|
||||
}
|
||||
|
||||
p {
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
font-weight: 400;
|
||||
}
|
||||
|
||||
/* Outlines the grids, remove when sending */
|
||||
/* table td {
|
||||
border: 1px solid rgb(227, 238, 245);
|
||||
} */
|
||||
|
||||
/* CLIENT-SPECIFIC STYLES */
|
||||
body,
|
||||
table,
|
||||
td,
|
||||
a {
|
||||
-webkit-text-size-adjust: 100%;
|
||||
-ms-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
table,
|
||||
td {
|
||||
mso-table-lspace: 0pt;
|
||||
mso-table-rspace: 0pt;
|
||||
}
|
||||
|
||||
img {
|
||||
-ms-interpolation-mode: bicubic;
|
||||
}
|
||||
|
||||
/* RESET STYLES */
|
||||
img {
|
||||
border: 0;
|
||||
outline: none;
|
||||
text-decoration: none;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse !important;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0 !important;
|
||||
padding: 0 !important;
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
li {
|
||||
font-size: 16px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
/* iOS BLUE LINKS */
|
||||
a[x-apple-data-detectors] {
|
||||
color: inherit !important;
|
||||
text-decoration: none !important;
|
||||
font-size: inherit !important;
|
||||
font-family: inherit !important;
|
||||
font-weight: inherit !important;
|
||||
line-height: inherit !important;
|
||||
}
|
||||
|
||||
/* ANDROID CENTER FIX */
|
||||
div[style*="margin: 16px 0;"] {
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
/* MEDIA QUERIES */
|
||||
@media all and (max-width:699px) {
|
||||
.wrapper {
|
||||
width: 100% !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.container {
|
||||
width: calc(100% - 64px) !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.mobile {
|
||||
width: 100% !important;
|
||||
display: block !important;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.img {
|
||||
width: 100% !important;
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
*[class="mobileOff"] {
|
||||
width: 0px !important;
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
*[class*="mobileOn"] {
|
||||
display: block !important;
|
||||
max-height: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
.table tr {
|
||||
border-top: 1px solid #cccccc;
|
||||
border-bottom: 1px solid #cccccc;
|
||||
}
|
||||
</style>
|
||||
|
||||
</head>
|
||||
|
||||
<body style="margin:0; padding:0; background-color:#f2f2f2;">
|
||||
|
||||
<span style="display: block; width: 700px !important; max-width: 700px; height: 1px" class="mobileOff"></span>
|
||||
|
||||
<center>
|
||||
<table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#f2f2f2">
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
|
||||
<!-- Logo -->
|
||||
<table width="700" cellpadding="0" cellspacing="0" border="0" class="wrapper" bgcolor="#FFFFFF">
|
||||
<tr>
|
||||
<td height="32" style="font-size:12px; line-height:15px;"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
|
||||
<table width="636" cellpadding="0" cellspacing="0" border="0" class="container">
|
||||
<tr>
|
||||
<td valign="top">
|
||||
<a href="https://www.tooloop.de"><img
|
||||
src="http://newsletter.tooloop.de/uploads/tooloop-logo.png"
|
||||
width="128px" alt="Tooloop"></a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="32" style="font-size:12px; line-height:15px;"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- --------------------------------------------------- -->
|
||||
<!-- Content -->
|
||||
<!-- --------------------------------------------------- -->
|
||||
|
||||
<!-- schon angepasst -->
|
||||
|
||||
<table width="700" cellpadding="0" cellspacing="0" border="0" class="wrapper" bgcolor="#ffffff">
|
||||
<tr>
|
||||
<td height="32" style="font-size:12px; line-height:15px;"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
|
||||
<table width="636" cellpadding="0" cellspacing="0" border="0" class="container">
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
<p>Hallo {{ $offer['contact']['salutation'] ?? '' }} {{
|
||||
$offer['contact']['lastName'] }},</p>
|
||||
<p>wir bedanken uns herzlich für Ihren Auftrag und bestätigen Ihnen hiermit
|
||||
den Eingang und die Annahme Ihres Auftrags vom {{
|
||||
$fmt->format(strtotime($offer['orderDate'])) }}.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="32" style="font-size:12px; line-height:15px;"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<table width="100%" class="table">
|
||||
<!-- <tr>
|
||||
<th align="left" height="32" style="font-size:16px;">Angebots-Nr.
|
||||
</th>
|
||||
<td align="left" height="32" style="font-size:16px;">{{ $offer['nr']
|
||||
}}</td>
|
||||
</tr> -->
|
||||
<tr>
|
||||
<th align="left" height="32" style="font-size:16px;">Betreff</th>
|
||||
<td align="left" height="32" style="font-size:16px;">{{
|
||||
$offer['title'] }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" height="32" style="font-size:16px;">Unser Angebot
|
||||
vom</th>
|
||||
<td align="left" height="32" style="font-size:16px;">{{
|
||||
$fmt->format(strtotime($offer['offerDate'])) }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" height="32" style="font-size:16px;">Gesamtbetrag
|
||||
</th>
|
||||
<td align="left" height="32" style="font-size:16px;">
|
||||
@toCurrency(round($offer['totalAmount'] * 1.19, 2))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th align="left" height="32" style="font-size:16px;">Zahlungsziel
|
||||
</th>
|
||||
@if($offer['paymentTerms']['isFixed'])
|
||||
<td align="left" height="32" style="font-size:16px;">{{
|
||||
$offer['paymentTerms']['description'] }}</td>
|
||||
@else
|
||||
<td align="left" height="32" style="font-size:16px;">{{
|
||||
$offer['paymentTerms']['days'] }} Tage</td>
|
||||
@endif
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="32" style="font-size:12px; line-height:15px;"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
<p>Falls Sie Fragen haben oder Änderungen am Auftrag vornehmen möchten,
|
||||
stehen wir Ihnen gerne zur Verfügung. Wir freuen uns auf eine
|
||||
erfolgreiche Zusammenarbeit.</p>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="32" style="font-size:12px; line-height:15px;"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="left" valign="top">
|
||||
<p style="color: #999999; font-size: 14px; line-height: 21px;">Es gelten
|
||||
unsere allgemeinen Geschäftsbedingungen, die Sie jederzeit unter <a
|
||||
href="https://www.tooloop.de/de/agb">www.tooloop.de/agb</a> einsehen
|
||||
können.</p>
|
||||
<p style="color: #999999; font-size: 14px; line-height: 21px;">Dieses
|
||||
Dokument dient als Auftragsbestätigung und ist nicht als
|
||||
umsatzsteuerlich gültiges Dokument zu verstehen. Es berechtigt nicht zum
|
||||
Vorsteuerabzug. <!-- Der ausgewiesene
|
||||
Mehrwertsteuerbetrag dient lediglich zu Ihrer Information.--> Die
|
||||
Rechnung
|
||||
zu Ihrem Auftrag wird Ihnen in einer separaten Mail zugesendet.
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="32" style="font-size:12px; line-height:15px;"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- --------------------------------------------------- -->
|
||||
<!-- End content -->
|
||||
<!-- --------------------------------------------------- -->
|
||||
|
||||
|
||||
<!-- Last Space -->
|
||||
<table width="700" cellpadding="0" cellspacing="0" border="0" class="wrapper" bgcolor="#ffffff">
|
||||
<tr>
|
||||
<td height="32" style="font-size:12px; line-height:15px;"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- Footer -->
|
||||
<table width="700" cellpadding="0" cellspacing="0" border="0" class="wrapper" bgcolor="#f2f2f2">
|
||||
<tr>
|
||||
<td height="64" style="font-size:24px; line-height:30px;"> </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
|
||||
<table width="636" cellpadding="0" cellspacing="0" border="0" class="container">
|
||||
<tr>
|
||||
<td align="center" valign="top">
|
||||
<p style="font-size: 14px; line-height: 21px;">
|
||||
<a style="color: #00264D;" href="tel:+4982165079983">+49 821
|
||||
65079983</a>,
|
||||
<a href="https://www.tooloop.de" style="color: #00264D;"
|
||||
target="_blank">www.tooloop.de</a>,
|
||||
<a style="color: #00264D;"
|
||||
href="mailto:info@tooloop.de">info@tooloop.de</a>
|
||||
</p>
|
||||
<p style="color: #999999; font-size: 14px; line-height: 21px;">Tooloop
|
||||
Multimedia Daniel
|
||||
Stock, Rehmstraße 4, 86161 Augsburg</p>
|
||||
<p>
|
||||
<a style="margin: 0 8px;" href="https://threema.id/KACDAD2H"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_threema.png"
|
||||
width="32px" alt="Threema"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://matrix.to/#/@vollstock:matrix.org"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_matrix.png"
|
||||
width="32px" alt="Matrix"></a>
|
||||
<a style="margin: 0 8px;" href="https://www.github.com/tooloop"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_github.png"
|
||||
width="32px" alt="Github"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://www.linkedin.com/in/daniel-stock-749678123"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_linkedin.png"
|
||||
width="32px" alt="LinkedIn"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://www.xing.com/profile/Daniel_Stock9"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_xing.png"
|
||||
width="32px" alt="Xing"></a>
|
||||
<a style="margin: 0 8px;" href="https://mastodon.social/@tooloop"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_mastodon.png"
|
||||
width="32px" alt="Xing"></a>
|
||||
<a style="margin: 0 8px;"
|
||||
href="https://www.instagram.com/tooloop.multimedia/"><img
|
||||
src="http://newsletter.tooloop.de/uploads/contact_logo_instagram.png"
|
||||
width="32px" alt="Xing"></a>
|
||||
</p>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td height="64" style="font-size:24px; line-height:30px;"> </td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
+50
-2
@@ -8,15 +8,18 @@
|
||||
use App\Models\Invoice;
|
||||
use App\Http\Controllers\PaymentTermsController;
|
||||
use App\Http\Controllers\SettingController;
|
||||
use App\Mail\OrderConfirmation;
|
||||
use App\Support\ApiDataTransformer;
|
||||
use Illuminate\Support\Facades\Mail;
|
||||
|
||||
|
||||
Route::get('customers/{id}', [CustomerController::class, 'single']);
|
||||
Route::get('customers', [CustomerController::class, 'index']);
|
||||
// ->middleware('auth:sanctum');
|
||||
|
||||
|
||||
// Route::apiResource('invoices', InvoiceController::class);
|
||||
// ->middleware('auth:sanctum');
|
||||
|
||||
Route::get('/invoices', [InvoiceController::class, 'index']);
|
||||
Route::post('/invoices', [InvoiceController::class, 'store']);
|
||||
Route::get('/invoices/{id}', [InvoiceController::class, 'single']);
|
||||
@@ -25,7 +28,52 @@
|
||||
|
||||
Route::get('/invoices/{id}/remind', function ($id) {
|
||||
$invoice = InvoiceController::single($id);
|
||||
return new Reminder($invoice);
|
||||
Mail::to('daniel@vollstock.de')->send(new Reminder($invoice));
|
||||
// return new Reminder($invoice);
|
||||
});
|
||||
|
||||
Route::get('/offers/{id}/confirmation', function ($id) {
|
||||
// $offer = offerController::single($id);
|
||||
$offer = [
|
||||
'nr' => 0,
|
||||
'offerDate' => '2025-10-01',
|
||||
'orderDate' => '2025-10-28',
|
||||
'customerId' => 0,
|
||||
'customer' => [
|
||||
'companyName' => '',
|
||||
'vatId' => '',
|
||||
'billingAddress' => [
|
||||
'lineOne' => '',
|
||||
'lineTwo' => '',
|
||||
'city' => '',
|
||||
'postalCode' => '',
|
||||
'countryCode' => 'DE',
|
||||
]
|
||||
],
|
||||
'contact' => [
|
||||
'salutation' => 'Frau',
|
||||
'firstName' => '',
|
||||
'lastName' => '',
|
||||
'email' => '',
|
||||
'phone' => '',
|
||||
'position' => null,
|
||||
'isPrimary' => false,
|
||||
'avatar' => null,
|
||||
],
|
||||
'totalAmount' => '13575.88',
|
||||
'title' => "",
|
||||
'text' => '',
|
||||
'items' => [],
|
||||
'paymentTerms' => [
|
||||
'name' => 'onReceipt',
|
||||
'description' => 'Bei Rechnungserhalt',
|
||||
'isFixed' => true,
|
||||
'days' => null,
|
||||
]
|
||||
];
|
||||
|
||||
// Mail::to('')->cc([''])->send(new OrderConfirmation($offer));
|
||||
return new OrderConfirmation($offer);
|
||||
});
|
||||
|
||||
Route::get('/paymentterms', [PaymentTermsController::class, 'index']);
|
||||
|
||||
Reference in New Issue
Block a user