Fewo/ PDFs / Mails v3

This commit is contained in:
Kevin Adametz 2019-05-06 20:21:40 +02:00
parent 7abfe3f700
commit e537e47a82
44 changed files with 2112 additions and 527 deletions

16
.env
View file

@ -13,6 +13,8 @@ APP_URL_STERN=http://sterntours.local
LOG_CHANNEL=stack
#DB_CONNECTION=mysql
#DB_HOST=localhost
#DB_PORT=3306
@ -46,14 +48,16 @@ REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
#info@@mein.sterntours.de
#B7f8Ojt98v6tMz8W
MAIL_BBC=info@adametz.media
#MAIL_BBC=info@sterntours.de
MAIL_DRIVER=smtp
MAIL_HOST=w00df904.kasserver.com
MAIL_HOST=mail.your-server.de
MAIL_PORT=587
MAIL_USERNAME=m0479305
MAIL_PASSWORD=m4CowydxoC4dY2DB
MAIL_ENCRYPTION=null
MAIL_USERNAME=info@mein.sterntours.de
MAIL_PASSWORD=B7f8Ojt98v6tMz8W
MAIL_ENCRYPTION=TLS
PUSHER_APP_ID=
PUSHER_APP_KEY=

881
.idea/workspace.xml generated

File diff suppressed because it is too large Load diff

View file

@ -3,12 +3,15 @@
namespace App\Http\Controllers;
use App\Models\FewoPrice;
use App\Mail\MailSendFeWoInvoice;
use App\Mail\MailSendFeWoService;
use App\Mail\MailSendFeWoInfo;
use App\Models\CMSContent;
use App\Models\FewoReservation;
use App\Models\FewoSeason;
use App\Models\TravelUserBookingFewo;
use App\Repositories\TravelUserBookingFewoRepository;
use Carbon\Carbon;
use App\Services\Util;
use Illuminate\Support\Facades\Mail;
use Input;
class TravelUserBookingFewoController extends Controller
@ -35,6 +38,9 @@ class TravelUserBookingFewoController extends Controller
{
$max_adults = 10;
$max_children = 10;
$replace_info_text = [];
if($id == "new") {
$travel_user_booking_fewo = new TravelUserBookingFewo();
$id = 'new';
@ -43,13 +49,21 @@ class TravelUserBookingFewoController extends Controller
$max_adults = isset($travel_user_booking_fewo->fewo_lodging->maximum_adults) ? $travel_user_booking_fewo->fewo_lodging->maximum_adults : 10;
$max_children = isset($travel_user_booking_fewo->fewo_lodging->maximum_childs) ? $travel_user_booking_fewo->fewo_lodging->maximum_childs : 10;;
$id = $travel_user_booking_fewo->id;
$replace_info_text['fewo_user_anrede'] = $travel_user_booking_fewo->getUserSalutation();
$replace_info_text['fewo_adresse'] = $travel_user_booking_fewo->getNameAddressLocation(", ");
}
$data = [
'travel_user_booking_fewo' => $travel_user_booking_fewo,
'max_adults' => $max_adults,
'max_children' => $max_children,
'id' => $id,
];
if(!$travel_user_booking_fewo->info_mail_text) {
$travel_user_booking_fewo->info_mail_text = CMSContent::getContentBySlug('pdf-vorlage-anreiseinfo-fewo');
$travel_user_booking_fewo->info_mail_text = Util::replacePlaceholders($travel_user_booking_fewo->info_mail_text, $replace_info_text);
}
$data = [
'travel_user_booking_fewo' => $travel_user_booking_fewo,
'max_adults' => $max_adults,
'max_children' => $max_children,
'id' => $id,
];
return view('travel.user.booking.detail', $data);
}
@ -59,27 +73,92 @@ class TravelUserBookingFewoController extends Controller
if($data['action'] == 'saveAll'){
return $this->userBookingFewoRepo->update($id, $data);
}
if($data['action'] == 'createInvoice'){
if(!TravelUserBookingFewo::find($id)){
\Session()->flash('alert-error', __('Buchung nicht gefunden.'));
return back()->withInput(Input::all());
}
return $this->userBookingFewoRepo->createInvoicePDF($id, $data);
$ret = $this->userBookingFewoRepo->check($id, $data);
if($ret['success'] == false){
return back()->withInput(Input::all())->withErrors($ret['error']);
}
if($ret['success'] == true){
$this->userBookingFewoRepo->createInvoicePDF($id);
\Session()->flash('alert-success', __('Mietbestätigung / Rechnung wurde erstellt.'));
return redirect(route('travel_user_booking_fewo_detail', [$ret['id']]));
}
}
if($data['action'] == 'createTravelInfo'){
if(!TravelUserBookingFewo::find($id)){
\Session()->flash('alert-error', __('Buchung nicht gefunden.'));
return back()->withInput(Input::all());
}
$ret = $this->userBookingFewoRepo->check($id, $data);
if($ret['success'] == false){
return back()->withInput(Input::all())->withErrors($ret['error']);
}
if($ret['success'] == true){
$this->userBookingFewoRepo->createTravelInfoPDF($id, $data['info_mail_text']);
\Session()->flash('alert-success', __('Anreiseinfo wurde erstellt/gespeichert.'));
return redirect(route('travel_user_booking_fewo_detail', [$ret['id']]));
}
}
if($data['action'] == 'sendMailtoUser') {
$travel_user_booking_fewo = TravelUserBookingFewo::findOrFail($id);
if($travel_user_booking_fewo->travel_user_id && $travel_user_booking_fewo->travel_user->email){
$mail_bbc = config('mail.mail_bbc');
Mail::to($travel_user_booking_fewo->travel_user->email)->bcc($mail_bbc)->send(new MailSendFeWoInvoice($travel_user_booking_fewo, Input::get('send_mail_user_notice')));
$send_user_mail = $travel_user_booking_fewo->send_user_mail;
$send_user_mail[] = [date('H:i d.m.Y') => Input::get('send_mail_user_notice')];
$travel_user_booking_fewo->send_user_mail = $send_user_mail;
$travel_user_booking_fewo->save();
\Session()->flash('alert-success', __('E-mail wurde an den Mieter versendet.'));
return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id]));
}
}
if($data['action'] == 'sendInfosMailtoUser') {
$travel_user_booking_fewo = TravelUserBookingFewo::findOrFail($id);
if($travel_user_booking_fewo->travel_user_id && $travel_user_booking_fewo->travel_user->email){
$mail_bbc = config('mail.mail_bbc');
Mail::to($travel_user_booking_fewo->travel_user->email)->bcc($mail_bbc)->send(new MailSendFeWoInfo($travel_user_booking_fewo));
$send_info_mail = $travel_user_booking_fewo->send_info_mail;
$send_info_mail[] = [date('H:i d.m.Y') => ''];
$travel_user_booking_fewo->send_info_mail = $send_info_mail;
$travel_user_booking_fewo->save();
\Session()->flash('alert-success', __('E-mail wurde an den Mieter versendet.'));
return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id]));
}
}
if($data['action'] == 'sendMailtoService') {
$travel_user_booking_fewo = TravelUserBookingFewo::findOrFail($id);
if($travel_user_booking_fewo){
$mail_bbc = config('mail.mail_bbc');
Mail::to(Input::get('send_mail_service_mail'))->bcc($mail_bbc)->send(new MailSendFeWoService($travel_user_booking_fewo, Input::get('send_mail_service_subject'), Input::get('send_mail_service_content')));
$send_service_mail = $travel_user_booking_fewo->send_service_mail;
$send_service_mail[] = ['d' => date('H:i d.m.Y'),
'm'=>Input::get('send_mail_service_mail'),
's'=>Input::get('send_mail_service_subject'),
'c'=>Input::get('send_mail_service_content')];
$travel_user_booking_fewo->send_service_mail = $send_service_mail;
$travel_user_booking_fewo->save();
\Session()->flash('alert-success', __('E-mail wurde an den Dienstleister versendet.'));
return redirect(route('travel_user_booking_fewo_detail', [$travel_user_booking_fewo->id]));
}
}
}
public function delete($id){
$model = TravelUserBookingFewo::findOrFail($id);
$FewoReservations = FewoReservation::where('lodging_id', $model->fewo_lodging_id)->where('from_date', $model->getFromDateRaw())->where('to_date', $model->getToDateRaw())->get();

View file

@ -0,0 +1,57 @@
<?php
namespace App\Mail;
use App\Models\TravelUserBookingFewo;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use Storage;
class MailSendFeWoInfo extends Mailable
{
use Queueable, SerializesModels;
protected $travel_user_booking_fewo;
public $subject;
public function __construct(TravelUserBookingFewo $travel_user_booking_fewo)
{
$this->travel_user_booking_fewo = $travel_user_booking_fewo;
$this->subject = __('STERN TOURS Anreiseinfo FEWO');
}
public function build()
{
$salutation = __('Dear customer').",";
if($this->travel_user_booking_fewo->travel_user){
if($this->travel_user_booking_fewo->travel_user->salutation_id == 1){
$salutation = __('Dear Sir')." ".$this->travel_user_booking_fewo->travel_user->last_name.",";
}else{
$salutation = __('Dear Mrs')." ".$this->travel_user_booking_fewo->travel_user->last_name.",";
}
}
$file1 = array(
'path' => $this->travel_user_booking_fewo->getTravelInfoPathFile(),
'name' => 'Stern-Tours-'.$this->travel_user_booking_fewo->getTravelInfoFileName(),
'mine' => 'application/pdf',
);
return $this->view('emails.info')
->with([
'salutation' => $salutation,
'copy1line' => $this->travel_user_booking_fewo->info_mail_text,
'copy2line' => "",
'greetings' => __('Best regards'),
'model' => $this->travel_user_booking_fewo,
])
->attach($file1['path'], [
'as' => $file1['name'],
'mime' => $file1['mine'],
])
;
}
}

View file

@ -0,0 +1,68 @@
<?php
namespace App\Mail;
use App\Models\TravelUserBookingFewo;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use Storage;
class MailSendFeWoInvoice extends Mailable
{
use Queueable, SerializesModels;
protected $travel_user_booking_fewo;
protected $notice;
public $subject;
public function __construct(TravelUserBookingFewo $travel_user_booking_fewo, $notice)
{
$this->travel_user_booking_fewo = $travel_user_booking_fewo;
$this->notice = $notice;
$this->subject = __('STERN TOURS Mietbestätigung FEWO');
}
public function build()
{
$salutation = __('Dear customer').",";
if($this->travel_user_booking_fewo->travel_user){
if($this->travel_user_booking_fewo->travel_user->salutation_id == 1){
$salutation = __('Dear Sir')." ".$this->travel_user_booking_fewo->travel_user->last_name.",";
}else{
$salutation = __('Dear Mrs')." ".$this->travel_user_booking_fewo->travel_user->last_name.",";
}
}
$file1 = array(
'path' => Storage::disk('public')->path("pdf/Stern-Tours-Mietbedingungen.pdf"),
'name' => 'Stern-Tours-Mietbedingungen.pdf',
'mine' => 'application/pdf',
);
$file2 = array(
'path' => $this->travel_user_booking_fewo->getInvoicePathFile(),
'name' => 'Stern-Tours-'.$this->travel_user_booking_fewo->getInvoiceFileName(),
'mine' => 'application/pdf',
);
return $this->view('emails.invoice')
->with([
'salutation' => $salutation,
'copy1line' => "herzlichen Dank für Ihre Online-Buchung vom ".$this->travel_user_booking_fewo->booking_date.", hiermit bestätigen wir verbindlich Ihre Anmietung wie folgt:",
'copy2line' => '',
'notice' => $this->notice,
'greetings' => __('Best regards'),
'model' => $this->travel_user_booking_fewo,
])
->attach($file1['path'], [
'as' => $file1['name'],
'mime' => $file1['mine'],
])
->attach($file2['path'], [
'as' => $file2['name'],
'mime' => $file2['mine'],
]);
}
}

View file

@ -0,0 +1,35 @@
<?php
namespace App\Mail;
use App\Models\TravelUserBookingFewo;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class MailSendFeWoService extends Mailable
{
use Queueable, SerializesModels;
protected $travel_user_booking_fewo;
public $subject;
protected $content;
public function __construct(TravelUserBookingFewo $travel_user_booking_fewo, $subject, $content)
{
$this->travel_user_booking_fewo = $travel_user_booking_fewo;
$this->subject = $subject;
$this->content = $content;
}
public function build()
{
return $this->view('emails.content')->with([
'content' => $this->content,
'greetings' => __('Best regards'),
]);
}
}

View file

@ -41,7 +41,7 @@ class MailVerifyAccount extends Mailable
'url' => route('register_verify', $this->confirmation_code),
'salutation' => $salutation,
'button' => __('Verify Your Email Address'),
'copy1line' => __('Thank you for creating an account with the JACKON Infomanager. Please follow the link below to confirm your email address.'),
'copy1line' => __('Please follow the link below to confirm your email address.'),
'copy2line' => __('Or copy this link into the address bar of your browser.'),
'greetings' => __('Best regards'),
]);

View file

@ -112,4 +112,27 @@ class CMSContent extends Model
}
public static function getContentBySlug($slug){
$CMSContent = CMSContent::whereSlug(trim($slug))->first();
if($CMSContent){
switch ($CMSContent->field){
case 'text':
return $CMSContent->text;
break;
case 'full_text':
return $CMSContent->full_text;
break;
case 'integer':
return $CMSContent->integer;
break;
case 'decimal':
return $CMSContent->decimal;
break;
}
}
return false;
}
}

View file

@ -9,8 +9,8 @@ namespace App\Models;
use Carbon;
use Illuminate\Database\Eloquent\Model;
use Util;
use Storage;
use App\Services\Util;
/**
* Class TravelUserBookingFewo
*
@ -90,7 +90,10 @@ class TravelUserBookingFewo extends Model
'is_calendar_fewo_direct' => 'bool',
'is_calendar_hrs' => 'bool',
'is_calendar_stern_tours' => 'bool',
'status' => 'int'
'status' => 'int',
'send_user_mail' => 'array',
'send_service_mail' => 'array',
'send_info_mail' => 'array',
];
protected $dates = [
@ -326,10 +329,6 @@ class TravelUserBookingFewo extends Model
return isset($this->attributes['price_total']) ? $this->attributes['price_total'] : 0;
}
public function getBookingDateYear(){
return Carbon::parse($this->booking_date)->format('Y');
}
public function getPriceTotalFirstPay(){
if($this->attributes['price_total'] == 0){
return 0;
@ -358,6 +357,125 @@ class TravelUserBookingFewo extends Model
$first_pay = $this->attributes['price_travel']/2;
return number_format(($this->attributes['price_travel'] - $first_pay + $this->attributes['price_deposit']), 2, ',', '.');
}
public function getBookingDateYear(){
return Carbon::parse($this->booking_date)->format('Y');
}
//get Invoice Name / Paths / ...
public function getInvoiceFileName(){
if($this->invoice_number) {
return Util::sanitize($this->invoice_number).".pdf";
}
return false;
}
public function getInvoicePath(){
$dir = $this->getBookingDateYear()."/";
if(!Storage::disk('fewo_invoices')->exists( $dir )){
Storage::disk('fewo_invoices')->makeDirectory($dir); //creates directory
}
$path = Storage::disk('fewo_invoices')->getAdapter()->getPathPrefix();
return $path.$dir;
}
public function isInvoice(){
if($this->invoice_number){
$dir = $this->getBookingDateYear()."/";
$filename = $this->getInvoiceFileName();
if(Storage::disk('fewo_invoices')->exists( $dir.$filename )){
return true;
}
}
return false;
}
public function getInvoicePathFile(){
$dir = $this->getBookingDateYear()."/";
$filename = $this->getInvoiceFileName();
if(Storage::disk('fewo_invoices')->exists( $dir.$filename )){
return Storage::disk('fewo_invoices')->path($dir.$filename);
}
return false;
}
public function getInvoiceUrlFile(){
$dir = $this->getBookingDateYear()."/";
$filename = $this->getInvoiceFileName();
if(Storage::disk('fewo_invoices')->exists( $dir.$filename )){
return Storage::disk('fewo_invoices')->url($dir.$filename);
}
return false;
}
public function getInvoiceLastModified(){
$dir = $this->getBookingDateYear()."/";
$filename = $this->getInvoiceFileName();
if(Storage::disk('fewo_invoices')->exists( $dir.$filename )){
return Carbon::createFromTimestamp(Storage::disk('fewo_invoices')->lastModified($dir.$filename))->format("H:i d.m.Y");
}
return false;
}
//get TravelInfos Name / Paths / ...
public function getTravelInfoFileName(){
if($this->invoice_number) {
return "Anreiseinfo-".Util::sanitize($this->invoice_number).".pdf";
}
return false;
}
public function getTravelInfoPath(){
$dir = $this->getBookingDateYear()."/";
if(!Storage::disk('fewo_infos')->exists( $dir )){
Storage::disk('fewo_infos')->makeDirectory($dir); //creates directory
}
$path = Storage::disk('fewo_infos')->getAdapter()->getPathPrefix();
return $path.$dir;
}
public function isTravelInfo(){
if($this->invoice_number){
$dir = $this->getBookingDateYear()."/";
$filename = $this->getTravelInfoFileName();
if(Storage::disk('fewo_infos')->exists( $dir.$filename )){
return true;
}
}
return false;
}
public function getTravelInfoPathFile(){
$dir = $this->getBookingDateYear()."/";
$filename = $this->getTravelInfoFileName();
if(Storage::disk('fewo_infos')->exists( $dir.$filename )){
return Storage::disk('fewo_infos')->path($dir.$filename);
}
return false;
}
public function getTravelInfoUrlFile(){
$dir = $this->getBookingDateYear()."/";
$filename = $this->getTravelInfoFileName();
if(Storage::disk('fewo_infos')->exists( $dir.$filename )){
return Storage::disk('fewo_infos')->url($dir.$filename);
}
return false;
}
public function getTravelInfoLastModified(){
$dir = $this->getBookingDateYear()."/";
$filename = $this->getTravelInfoFileName();
if(Storage::disk('fewo_infos')->exists( $dir.$filename )){
return Carbon::createFromTimestamp(Storage::disk('fewo_infos')->lastModified($dir.$filename))->format("H:i d.m.Y");
}
return false;
}
//get strings
public function getBookingUserAddress(){
if($this->travel_user){
$company = $this->travel_user->company ? $this->travel_user->company ."\n" : "";
@ -367,12 +485,39 @@ class TravelUserBookingFewo extends Model
}
return "";
}
public function getNameAddressLocation(){
public function getNameAddressLocation($sep = "\n"){
if($this->fewo_lodging){
return $this->fewo_lodging->name."\n".$this->fewo_lodging->adress1." ".$this->fewo_lodging->adress2.", ".$this->fewo_lodging->zip_code." ".$this->fewo_lodging->city;
return $this->fewo_lodging->name.$sep.$this->fewo_lodging->adress1." ".$this->fewo_lodging->adress2.", ".$this->fewo_lodging->zip_code." ".$this->fewo_lodging->city;
}
return "";
}
public function getUserSalutation(){
$salutation = __('Dear customer');
if($this->travel_user){
if($this->travel_user->salutation_id == 1){
$salutation = __('Dear Sir')." ".$this->travel_user->last_name;
}else{
$salutation = __('Dear Mrs')." ".$this->travel_user->last_name;
}
}
return $salutation;
}
public function getServiceMailSubject(){
if($this->fewo_lodging){
return "Neue Anmietung ".$this->fewo_lodging->name." mit Anreise ".$this->from_date;
}
return "Neue Anmietung Anreise ".$this->from_date;
}
public function getServiceMailContent(){
return $this->adults." + ".$this->children." (Erwachsene + Kinder)\n".
$this->from_date." - ".$this->to_date." ".$this->travel_user->first_name." ".$this->travel_user->last_name;
}
}

View file

@ -27,6 +27,27 @@ class TravelUserBookingFewoRepository extends BaseRepository {
}
public function createTravelInfoPDF($id, $travel_info_user_text){
$model = TravelUserBookingFewo::findOrFail($id);
$model->info_mail_text = $travel_info_user_text;
$model->save();
$data = [
'model' => $model,
'travel_info_user_text' => $travel_info_user_text,
];
$pdf = PDF::loadView('pdf.travel_info_fewo', $data);
$pdf->setPaper('A4', 'portrait');
$path =$model->getTravelInfoPath();
$filename = $model->getTravelInfoFileName();
$pdf->save($path.$filename);
return $path.$filename;
//return $pdf->stream('invoice.pdf');
}
public function createInvoicePDF($id){
@ -37,18 +58,12 @@ class TravelUserBookingFewoRepository extends BaseRepository {
$pdf = PDF::loadView('pdf.invoice_fewo', $data);
$pdf->setPaper('A4', 'portrait');
$dir = "/".$model->getBookingDateYear()."/";
if(!Storage::disk('invoices_fewo')->exists( $dir )){
Storage::disk('invoices_fewo')->makeDirectory($dir); //creates directory
}
$path = Storage::disk('invoices_fewo')->getAdapter()->getPathPrefix();
$filename = Util::sanitize($model->invoice_number).".pdf";
$path =$model->getInvoicePath();
$filename = $model->getInvoiceFileName();
$pdf->save($path.$filename);
$pdf->save($path.$dir.$filename);
//return $path.$dir.$filename;
return $pdf->stream('invoice.pdf');
return $path.$filename;
//return $pdf->stream('invoice.pdf');
}
public function check($id,$data)
{
@ -77,13 +92,13 @@ class TravelUserBookingFewoRepository extends BaseRepository {
'travel_user_id' => 'required',
'fewo_lodging_id' => 'required',
'booking_date' => 'required',
'invoice_number' => 'required',
'invoice_number' => 'required|unique:mysql_stern.travel_user_booking_fewos,invoice_number,'.$model->id,
'from_date'=>'required',
'to_date'=>'required',
'travel_booking_fewo_channel_id' => 'required',
'status' => 'required'
);
// $rules['email'] = 'required|string|email|max:255|unique:.travel_users,email,'.$model->id;
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return ['success' => false, 'error' => $validator];

View file

@ -52,4 +52,19 @@ class Util
strtolower($clean) :
$clean;
}
public static function replacePlaceholders($search, $replace){
preg_match_all("/\{{(.+?)\}}/", $search, $matches);
if (isset($matches[1]) && count($matches[1]) > 0){
foreach ($matches[1] as $key => $value) {
$kvalue = trim($value);
if (array_key_exists($kvalue, $replace)){
$search = preg_replace("/\{\{$value\}\}/", $replace[$kvalue], $search);
}
}
}
return $search;
}
}

View file

@ -54,10 +54,16 @@ return [
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
'invoices_fewo' => [
'fewo_invoices' => [
'driver' => 'local',
'root' => storage_path('app/invoices/fewo'),
'url' => env('APP_URL').'/storage/invoices/fewo',
'root' => storage_path('app/fewo/invoices'),
'url' => env('APP_URL').'/storage/fewo/invoices',
'visibility' => 'public',
],
'fewo_infos' => [
'driver' => 'local',
'root' => storage_path('app/fewo/infos'),
'url' => env('APP_URL').'/storage/fewo/infos',
'visibility' => 'public',
],
's3' => [

View file

@ -29,7 +29,7 @@ return [
|
*/
'host' => env('MAIL_HOST', 'smtp.kagado.de'),
'host' => env('MAIL_HOST', 'mail.your-server.de'),
/*
|--------------------------------------------------------------------------
@ -56,9 +56,12 @@ return [
*/
'from' => [
'address' => env('MAIL_FROM_ADDRESS', 'mail@kagado.de'),
'address' => env('MAIL_FROM_ADDRESS', 'info@mein.sterntours.de'),
'name' => env('MAIL_FROM_NAME', 'Mein Stern-Tours'),
],
'mail_bbc' => env('MAIL_BBC', 'info@sterntours.de'),
/*
|--------------------------------------------------------------------------

View file

@ -51,7 +51,10 @@ class CreateTravelUserBookingFewosTable extends Migration
$table->unsignedTinyInteger('status')->default(0);
$table->text('status_text')->nullable();
$table->text('send_user_mail')->nullable();
$table->text('send_service_mail')->nullable();
$table->text('info_mail_text')->nullable();
$table->text('send_info_mail')->nullable();
$table->timestamps();
$table->softDeletes();

View file

@ -89,4 +89,10 @@
}
.card hr.hr-primary {
border-color: rgba(100, 136, 89, 0.4);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View file

@ -16,11 +16,18 @@
</div>
@endif
<h4 class="font-weight-bold py-3 mb-4">
User bearbeiten/anlegen
</h4>
{!! Form::open(['url' => route('admin_user_store'), 'class' => 'form-horizontal']) !!}
<h4 class="font-weight-bold py-3 mb-1">
User @if($user->id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$user->id.")"}} verwalten @endif
<div class="float-right">
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('admin_users')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
</div>
</h4>
<div class="clearfix"></div>
<input type="hidden" name="user_id" id="user_id" value="@if($user->id>0){{$user->id}}@else new @endif">
@include('admin.user_form')

View file

@ -56,6 +56,13 @@
</div>
</div>
<div class="form-row">
<div class="form-group col">
<label for="name" class="form-label">{{ __('Slug') }}</label>
{{ Form::text('slug', $value->slug, array('class'=>'form-control', 'readonly')) }}
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">schließen</button>

View file

@ -2,11 +2,18 @@
@section('content')
<h4 class="font-weight-bold py-3 mb-1">
Feedback verwalten
</h4>
{!! Form::open(['url' => route('cms_feedback_detail', [$id]), 'class' => 'form-horizontal']) !!}
<h4 class="font-weight-bold py-3 mb-1">
Feedback @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
<div class="float-right">
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('cms_feedback')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
</div>
</h4>
<div class="clearfix"></div>
<input type="hidden" name="id" id="id" value="{{$id}}">
<!-- draft -->

View file

@ -2,11 +2,19 @@
@section('content')
<h4 class="font-weight-bold py-3 mb-1">
Sidebar Widget verwalten
</h4>
{!! Form::open(['url' => route('cms_sidebar_detail', [$id]), 'class' => 'form-horizontal']) !!}
<h4 class="font-weight-bold py-3 mb-1">
Sidebar Widget @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
<div class="float-right">
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('cms_sidebar')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
</div>
</h4>
<div class="clearfix"></div>
<input type="hidden" name="id" id="id" value="{{$id}}">

View file

@ -19,11 +19,19 @@
</div>
</div>
@endif
<h4 class="font-weight-bold py-3 mb-1">
Reiseführer verwalten
</h4>
{!! Form::open(['url' => route('cms_travel_magazine_detail', [$id]), 'class' => 'form-horizontal']) !!}
<h4 class="font-weight-bold py-3 mb-1">
Reiseführer @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
<div class="float-right">
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('cms_travel_magazine')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
</div>
</h4>
<div class="clearfix"></div>
<input type="hidden" name="id" id="id" value="{{$id}}">
<!-- draft -->

View file

@ -102,8 +102,8 @@
@if(count($draft->draft_items))
@php($i = 1)
<div class="text-left mt-3 mb-2">
<button type="submit" name="action" value="saveAll" class="btn btn-submit">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('drafts')}}" class="btn btn-default">{{ __('back') }}</a>
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('drafts')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
<div class="float-right">
<button type="submit" name="action" value="addItem" class="btn btn-sm btn-primary"><i class="far fa-plus"></i> Neue Leistung hinzufügen</button>
</div>
@ -287,7 +287,6 @@
<div class="text-right">
<button type="submit" name="action" value="addItem" class="btn btn-sm btn-primary"><i class="far fa-plus"></i> Neue Leistung hinzufügen</button>
</div>
<div class="text-left mt-3">
<button type="submit" name="action" value="saveAll" class="btn btn-submit">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('drafts')}}" class="btn btn-default">{{ __('back') }}</a>

View file

@ -109,7 +109,6 @@
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="700" class="w320">
<tr>
<td align="center" valign="top">
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style=" text-align:center;">
@ -119,7 +118,7 @@
<tr class="">
<td align="center" valign="top" style="font-size: 0px;" class="">
<picture class="">
<img src="https://www.sterntours.de/images/da2f996_wlogo_1.png" alt="STERN TOURS" style="border:none" width="260">
<img src="https://mein.sterntours.de/images/stern-tours-logo.png" alt="STERN TOURS" style="border:none" width="260">
</picture>
</td>
@ -133,7 +132,6 @@
</td>
</tr>
</table>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%"
bgcolor="#ffffff">
<tr>
@ -181,7 +179,7 @@
</table>
</center>
</td>
<tr>
</tr>
<tr>
<td style="color:#37302d;font-size: 14px;">
<center>
@ -206,9 +204,7 @@
</td>
</tr>
</table>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" class="force-full-width"
<table cellpadding="0" cellspacing="0" class="force-full-width"
bgcolor="#f8f8f8" style="margin: 0 auto">
<tr>
<td style="color:#7B7B7E; font-size:14px;">

View file

@ -0,0 +1,181 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mein STERN TOURS</title>
<style type="text/css">
@import url(https://fonts.googleapis.com/css?family=Roboto);
img {
max-width: 600px;
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
}
a {
text-decoration: none;
border: 0;
outline: none;
color: #5f8155;
}
a:hover {
color:#e5aa30;
}
a img {
border: none;
}
td, h1, h2, h3 {
font-family: "Roboto", Helvetica, Arial, sans-serif;
font-weight: 400;
}
td {
text-align: center;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100%;
height: 100%;
color: #37302d;
background: #ffffff;
font-size: 15px;
line-height: 26px
}
table {
border-collapse: collapse !important;
}
.headline {
color: #5f8155;
font-size: 16px;
}
.force-full-width {
width: 100% !important;
}
</style>
<style type="text/css" media="screen">
@media screen {
/*Thanks Outlook 2013! http://goo.gl/XLxpyl*/
td, h1, h2, h3 {
font-family: 'Roboto', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class="w320"] {
width: 320px !important;
}
}
</style>
<!--[if mso]>
<style type="text/css">
body, table, td {
font-family: Helvetica, Arial, sans-serif !important;
}
</style>
<![endif]-->
</head>
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
<div style="display: none; mso-hide: all; width: 0px; height: 0px; max-width: 0px; max-height: 0px; font-size: 0px; line-height: 0px;">
{{ $content }}
</div>
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%">
<tr>
<td align="center" valign="top" bgcolor="#f8f8f8" width="100%">
<center>
<br>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="700" class="w320">
<tr>
<td align="center" valign="top">
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style=" text-align:center;">
<center>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="">
<tbody class="">
<tr class="">
<td align="center" valign="top" style="font-size: 0px;" class="">
<picture class="">
<img src="https://mein.sterntours.de/images/stern-tours-logo.png" alt="STERN TOURS" style="border:none" width="260">
</picture>
</td>
</tr>
<tr>
<td><br></td>
</tr>
</tbody>
</table>
</center>
</td>
</tr>
</table>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%"
bgcolor="#ffffff">
<tr>
<td>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: left">
<br>
{!! nl2br($content) !!}
<br>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" class="force-full-width"
bgcolor="#f8f8f8" style="margin: 0 auto">
<tr>
<td style="color:#7B7B7E; font-size:14px;">
<br>
STERN TOURS GmbH | Emser Straße 3 | 10719 Berlin<br>
Tel: +49 (0) 30 700 94 100 | Fax: +49 (0) 30 700 94 1044 | stern@sterntours.de<br>
<br>
<a href="https://www.sterntours.de" style="color: #7B7B7E; text-decoration: underline;">www.sterntours.de</a>
<br>
</td>
</tr>
<tr>
<td style="color:#bbbbbb; font-size:12px;">
Geschäftsführer: Thomas Stern | Registergericht: Amtsgericht Charlottenburg | Registernummer: HRB 67111<br>
Steuernummer: 27/545/30703 | UST-Ident.-Nr.: DE192609253 | Finanzamt: Wilmersdorf<br>
<a href="{{route('data_protected')}}">Datenschutzerklärung</a> <br>
© 2018 All Rights Reserved <br>
<br>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View file

@ -0,0 +1,178 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mein STERN TOURS</title>
<style type="text/css">
@import url(https://fonts.googleapis.com/css?family=Roboto);
img {
max-width: 600px;
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
}
a {
text-decoration: none;
border: 0;
outline: none;
color: #5f8155;
}
a:hover {
color:#e5aa30;
}
a img {
border: none;
}
td, h1, h2, h3 {
font-family: "Roboto", Helvetica, Arial, sans-serif;
font-weight: 400;
}
td {
text-align: left;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100%;
height: 100%;
color: #37302d;
background: #ffffff;
font-size: 14px;
line-height: 20px
}
table {
border-collapse: collapse !important;
}
.headline {
color: #5f8155;
font-size: 16px;
}
.force-full-width {
width: 100% !important;
}
</style>
<style type="text/css" media="screen">
@media screen {
/*Thanks Outlook 2013! http://goo.gl/XLxpyl*/
td, h1, h2, h3 {
font-family: 'Roboto', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class="w320"] {
width: 320px !important;
}
}
</style>
<!--[if mso]>
<style type="text/css">
body, table, td {
font-family: Helvetica, Arial, sans-serif !important;
}
</style>
<![endif]-->
</head>
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
<div style="display: none; mso-hide: all; width: 0px; height: 0px; max-width: 0px; max-height: 0px; font-size: 0px; line-height: 0px;">
{{ $copy1line }}
</div>
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%">
<tr>
<td align="center" valign="top" bgcolor="#f8f8f8" width="100%">
<center>
<br>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="700" class="w320">
<tr>
<td align="center" valign="top">
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style=" text-align:center;">
<center>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="">
<tbody class="">
<tr class="">
<td align="center" valign="top" style="font-size: 0px; text-align: center">
<picture class="">
<img src="https://mein.sterntours.de/images/stern-tours-logo.png" alt="STERN TOURS" style="border:none" width="260">
</picture>
</td>
</tr>
<tr>
<td><br></td>
</tr>
</tbody>
</table>
</center>
</td>
</tr>
</table>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%"
bgcolor="#ffffff">
<tr>
<td>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: left">
<p style="font-size: 14px;">{!! nl2br($copy1line) !!}</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" class="force-full-width"
bgcolor="#f8f8f8" style="margin: 0 auto">
<tr>
<td style="color:#7B7B7E; font-size:14px; text-align: center">
<br>
STERN TOURS GmbH | Emser Straße 3 | 10719 Berlin<br>
Tel: +49 (0) 30 700 94 100 | Fax: +49 (0) 30 700 94 1044 | stern@sterntours.de<br>
<br>
<a href="https://www.sterntours.de" style="color: #7B7B7E; text-decoration: underline;">www.sterntours.de</a>
<br>
</td>
</tr>
<tr>
<td style="color:#bbbbbb; font-size:12px; text-align: center">
Geschäftsführer: Thomas Stern | Registergericht: Amtsgericht Charlottenburg | Registernummer: HRB 67111<br>
Steuernummer: 27/545/30703 | UST-Ident.-Nr.: DE192609253 | Finanzamt: Wilmersdorf<br>
<a href="{{route('data_protected')}}">Datenschutzerklärung</a> <br>
© 2018 All Rights Reserved
<br><br>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View file

@ -0,0 +1,268 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>mein STERN TOURS</title>
<style type="text/css">
@import url(https://fonts.googleapis.com/css?family=Roboto);
img {
max-width: 600px;
outline: none;
text-decoration: none;
-ms-interpolation-mode: bicubic;
}
a {
text-decoration: none;
border: 0;
outline: none;
color: #5f8155;
}
a:hover {
color:#e5aa30;
}
a img {
border: none;
}
td, h1, h2, h3 {
font-family: "Roboto", Helvetica, Arial, sans-serif;
font-weight: 400;
}
td {
text-align: left;
}
body {
-webkit-font-smoothing: antialiased;
-webkit-text-size-adjust: none;
width: 100%;
height: 100%;
color: #37302d;
background: #ffffff;
font-size: 14px;
line-height: 20px
}
table {
border-collapse: collapse !important;
}
.headline {
color: #5f8155;
font-size: 16px;
}
.force-full-width {
width: 100% !important;
}
</style>
<style type="text/css" media="screen">
@media screen {
/*Thanks Outlook 2013! http://goo.gl/XLxpyl*/
td, h1, h2, h3 {
font-family: 'Roboto', 'Helvetica Neue', 'Arial', 'sans-serif' !important;
}
}
</style>
<style type="text/css" media="only screen and (max-width: 480px)">
/* Mobile styles */
@media only screen and (max-width: 480px) {
table[class="w320"] {
width: 320px !important;
}
}
</style>
<!--[if mso]>
<style type="text/css">
body, table, td {
font-family: Helvetica, Arial, sans-serif !important;
}
</style>
<![endif]-->
</head>
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
<div style="display: none; mso-hide: all; width: 0px; height: 0px; max-width: 0px; max-height: 0px; font-size: 0px; line-height: 0px;">
{{ $copy1line }}
</div>
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%">
<tr>
<td align="center" valign="top" bgcolor="#f8f8f8" width="100%">
<center>
<br>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="700" class="w320">
<tr>
<td align="center" valign="top">
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style=" text-align:center;">
<center>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="">
<tbody class="">
<tr class="">
<td align="center" valign="top" style="font-size: 0px; text-align: center">
<picture class="">
<img src="https://mein.sterntours.de/images/stern-tours-logo.png" alt="STERN TOURS" style="border:none" width="260">
</picture>
</td>
</tr>
<tr>
<td><br></td>
</tr>
</tbody>
</table>
</center>
</td>
</tr>
</table>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%"
bgcolor="#ffffff">
<tr>
<td>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: left">
<br>
<b><span class="headline"> {{ $salutation }} </span></b>
<br>
<p style="font-size: 14px;">{{ $copy1line }}</p>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td>
<table style="padding: 20px; border:1px solid #eee; background-color: #f6fdf5" cellpadding="3" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: right; vertical-align: top; width: 25%; " >
{{ __('Belegungszeitraum:') }}
</td>
<td style="color:#37302d; text-align: left; vertical-align: top;">
<strong>von {{$model->from_date}} bis {{$model->to_date}}</strong>
</td>
</tr>
<tr>
<td style="color:#37302d; text-align: right; vertical-align: top; border-top:1px solid #e4e4e4;" >
{{ __('Ferienwohnung:') }}
</td>
<td style="color:#37302d; text-align: left; vertical-align: top; border-top:1px solid #E4E4E4;">
<strong>{!! nl2br($model->getNameAddressLocation()) !!}</strong>
</td>
</tr>
<tr>
<td style="color:#37302d; text-align: right; vertical-align: top; border-top:1px solid #E4E4E4;" >
{{ __('Mietpreis:') }}
</td>
<td style="color:#37302d; text-align: left; vertical-align: top; border-top:1px solid #E4E4E4;">
<strong>{{ $model->price_travel }} </strong>
</td>
</tr>
<tr>
<td style="color:#37302d; text-align: right; vertical-align: top; border-top:1px solid #E4E4E4;" >
{{ __('Service-Gebühr:') }}
</td>
<td style="color:#37302d; text-align: left; vertical-align: top; border-top:1px solid #E4E4E4;">
<strong>{{ $model->price_service }} </strong>
</td>
</tr>
<tr>
<td style="color:#37302d; text-align: right; vertical-align: top; border-top:1px solid #E4E4E4;" >
{{ __('Kaution:') }}
</td>
<td style="color:#37302d; text-align: left; vertical-align: top; border-top:1px solid #E4E4E4;">
<strong>{{ $model->price_deposit }} </strong>
</td>
</tr>
<tr>
<td style="color:#37302d; text-align: right; vertical-align: top; border-top:1px solid #E4E4E4;" >
{{ __('Gesamtpreis:') }}
</td>
<td style="color:#37302d; text-align: left; vertical-align: top; border-top:1px solid #E4E4E4;">
<strong>{{ $model->price_total }} </strong>
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td style="color:#37302d;font-size: 14px;">
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
@if($notice && $notice != "")
<tr>
<td style="color:#37302d;">
<p><b>Wichtige Hinweise:</b><br>
{!! nl2br($notice) !!}</p>
</td>
</tr>
@endif
<tr>
<td style="color:#37302d;">
<br>
<p>Mietbedingungen und Mietbestätigung / Rechnung finden Sie als PDF im Anhang.</p>
<p>Mit dieser Buchungsbestätigung ist der Mietvertrag für <strong>Sie und uns verbindlich.</strong></p>
<ul>
<li>eine sofort zahlungsfällige Anzahlung von 50% Mietpreis = <strong>{{ $model->getPriceTravelFirstPay() }} </strong></li>
<li>sowie eine Restzahlung von <strong>{{ $model->getPriceTravelSecondPay() }} </strong> bis spätestens 4 Wochen vor Belegungsbeginn inkl. der oben genannten Kaution.</li>
</ul>
<p>auf folgendes Bankkonto:<br>
<strong>STERN TOURS GmbH<br>
IBAN: DE83100208900018857111<br>
BIC: HYVEDEMM488</strong>
</p>
<p>Mit freundlichen Grüßen<br>
Ihr Team von STERN TOURS</p>
<br>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table cellpadding="0" cellspacing="0" class="force-full-width"
bgcolor="#f8f8f8" style="margin: 0 auto">
<tr>
<td style="color:#7B7B7E; font-size:14px; text-align: center">
<br>
STERN TOURS GmbH | Emser Straße 3 | 10719 Berlin<br>
Tel: +49 (0) 30 700 94 100 | Fax: +49 (0) 30 700 94 1044 | stern@sterntours.de<br>
<br>
<a href="https://www.sterntours.de" style="color: #7B7B7E; text-decoration: underline;">www.sterntours.de</a>
<br>
</td>
</tr>
<tr>
<td style="color:#bbbbbb; font-size:12px; text-align: center">
Geschäftsführer: Thomas Stern | Registergericht: Amtsgericht Charlottenburg | Registernummer: HRB 67111<br>
Steuernummer: 27/545/30703 | UST-Ident.-Nr.: DE192609253 | Finanzamt: Wilmersdorf<br>
<a href="{{route('data_protected')}}">Datenschutzerklärung</a> <br>
© 2018 All Rights Reserved
<br><br>
</td>
</tr>
</table>
</td>
</tr>
</table>
</center>
</td>
</tr>
</table>
</body>
</html>

View file

@ -167,8 +167,7 @@
<div id="detail_box">
<p> Sehr geehrte Damen und Herren,<br>
<p>{{$model->getUserSalutation()}},<br>
<br>
herzlichen Dank für Ihre Online-Buchung vom {{$model->booking_date}} :</p>
<p>Auf Grundlage der Beschreibung der gebuchten Unterkunft und unserer im Rahmen des Onlinebuchungsprozesses vertraglich einbezogenen Mietbedingungen
@ -178,7 +177,7 @@
<tr>
<td class="left">{{ __('Belegungszeitraum:') }}</td>
<td class="right">
<div class="font-weight-bold">{{$model->from_date}} von {{$model->to_date}}</div>
<div class="font-weight-bold">von {{$model->from_date}} bis {{$model->to_date}}</div>
</td>
</tr>
<tr>

View file

@ -0,0 +1,207 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
{!! Html::style('css/invoice_fewo_pdf.css') !!}
<style>
@page {
margin: 90mm 0 30mm 0;
}
.font-weight-bold {
font-weight: 600;
}
#logo_box {
position: absolute;
top:-80mm;
left: 25mm;
right: 25mm;
height: 25mm;
z-index: 1;
font-size: 10pt;
text-align: center;
}
#logo_box img {
width: 65mm;
}
#address_box {
position: absolute;
top:-40mm;
left: 25mm;
width: 100mm;
height: 45mm;
z-index: 1;
font-size: 11pt;
}
#address_box #address_back{
font-size: 7pt;
text-decoration: underline;
margin-bottom: 2mm;
}
#date_box {
position: absolute;
top:-10mm;
right: 15mm;
width: 70mm;
height: 10mm;
z-index: 1;
font-size: 10pt;
line-height: 12pt;
text-align: right;
}
#title_box {
position: absolute;
top:0mm;
left: 25mm;
width: 160mm;
height: 10mm;
z-index: 2;
font-weight: bold;
}
#title_box .title {
font-size: 16pt;
line-height: 12pt;
}
#title_box .subtitle {
font-size: 9pt;
line-height: 9pt;
}
#detail_box {
position: absolute;
top:15mm;
left: 25mm;
right: 15mm;
z-index: 3;
font-size: 9pt;
}
#detail_box table {
width: 100%;
line-height: 9pt;
border-collapse: collapse;
}
#detail_box table td {
border: 0.5pt solid #8c8c8c;
padding: 1mm;
}
#detail_box table td.left {
text-align: right;
width: 50mm;
}
#detail_box table td.right {
text-align: left;
}
.singel-line-top {
border-top: 1pt solid #1a1a18;
}
.double-line {
border-bottom: 2.5pt double #1a1a18;
}
.dotted-line {
border-bottom: 0.8pt dotted #1a1a18;
}
#footer_box {
position: absolute;
bottom:-25mm;
left: 25mm;
right: 15mm;
height: 30mm;
z-index: 6;
font-size: 7pt;
line-height: 8pt;
}
#footer_box table {
margin-top: 2mm;
width: 100%;
}
#footer_box table td {
vertical-align: top;
}
</style>
</head>
<body>
{{--
<div id="brand_paper_background">
<img src="{{ base_path()}}/storage/app/pdf/inno-plan-bg.png" height="100%" width="100%">
</div>
--}}
<div id="logo_box">
<img src="{{asset('images/stern-tours-logo.png')}}">
</div>
<div id="address_box">
<div id="address_back">STERN TOURS GmbH &bull; Emser Str. 3 &bull; 10719 Berlin</div>
{!! nl2br($model->getBookingUserAddress()) !!}
</div>
<div id="date_box">
Berlin, den {!! date("d.m.Y") !!}
</div>
<div id="title_box">
Anreiseinfo Nr. {{$model->invoice_number}}
</div>
<div id="detail_box">
<p>{!! nl2br($travel_info_user_text) !!}</p>
</div>
<div id="footer_box">
<strong>P.S.: Wir empfehlen dringend, den Abschluss einer Reiserücktrittskostenversicherung.</strong>
<table>
<tr>
<td style="width: 20%">
<strong>STERN TOURS GmbH</strong><br>
Emser Str. 3<br>
10719 Berlin<br>
</td>
<td>
<strong>Fon:</strong> 030 | 88 0 313 0<br>
<strong>Fax:</strong> 030 | 88 0 313 44<br>
<strong>E-Mail:</strong> kontakt@sterntours.de<br>
<strong>Web:</strong> www.sterntours.de
</td>
<td>
<strong>Bankverbindung:</strong><br>
STERN TOURS<br>
Hypo Vereinsbank<br>
IBAN: DE83100208900018857111<br>
BIC-/SWIFT-Code: HYVEDEMM488
</td>
<td>
<strong>Öffnungszeiten:</strong><br>
Mo-Do: 09.00-18.00 Uhr<br>
FR: 09.00-16.00 Uhr<br><br>
UStId: DE192609253<br>
Registernr.: HRB 67111<br>
Amtsgericht Charlottenburg<br>
</td>
</tr>
</table>
</div>
</body>
</html>

View file

@ -2,11 +2,17 @@
@section('content')
<h4 class="font-weight-bold py-3 mb-1">
Reiseland verwalten
</h4>
{!! Form::open(['url' => route('admin_settings_travel_country_detail', [$id]), 'class' => 'form-horizontal']) !!}
<h4 class="font-weight-bold py-3 mb-1">
Reiseland @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
<div class="float-right">
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('admin_settings_travel_country')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
</div>
</h4>
<div class="clearfix"></div>
<input type="hidden" name="id" id="id" value="{{$id}}">

View file

@ -2,11 +2,18 @@
@section('content')
<h4 class="font-weight-bold py-3 mb-1">
Programm verwalten
</h4>
{!! Form::open(['url' => route('travel_program_detail', [$id]), 'class' => 'form-horizontal']) !!}
<h4 class="font-weight-bold py-3 mb-1">
Programm @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
<div class="float-right">
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('travel_programs')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
</div>
</h4>
<div class="clearfix"></div>
<input type="hidden" name="id" id="id" value="{{$id}}">
<!-- draft -->

View file

@ -16,13 +16,17 @@
</div>
@endif
<h4 class="font-weight-bold py-3 mb-1">
Kunden @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
</h4>
{!! Form::open(['url' => route('travel_user_booking_fewo_detail', [$id]), 'class' => 'form-horizontal']) !!}
<input type="hidden" name="id" id="id" value="{{$id}}">
<h4 class="font-weight-bold py-3 mb-1">
Buchung FeWo @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
<div class="float-right">
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('travel_user_booking_fewos')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
</div>
</h4>
<div class="clearfix"></div>
<input type="hidden" name="id" id="id" value="{{$id}}">
@include('travel.user.booking.form')
<div class="text-left mt-3">

View file

@ -123,10 +123,12 @@
<div class="form-group col-sm-4">
<label class="custom-control custom-checkbox">
{!! Form::checkbox('is_calendar_stern_tours', 1, $travel_user_booking_fewo->is_calendar_stern_tours, ['class'=>'custom-control-input']) !!}
<span class="custom-control-label">{{__('STERN TOURS')}} <br>Reservierung:
<span class="custom-control-label">{{__('STERN TOURS')}} <br>Im Kalender:
@if($travel_user_booking_fewo->fewo_reservation && isset($travel_user_booking_fewo->fewo_reservation->from_date))
{{ $travel_user_booking_fewo->fewo_reservation->from_date->format('d.m.Y') }} - {{ $travel_user_booking_fewo->fewo_reservation->to_date->format('d.m.Y') }}
@endif
@else
nicht eingetragen
@endif
</span>
</label>
</div>
@ -148,7 +150,7 @@
</div>
<div class="form-group col-sm-6">
<label class="form-label" for="status_text">{{ __('Notiz') }}</label>
{{ Form::textarea('status_text', $travel_user_booking_fewo->status_text, ['class' => 'form-control', 'rows'=>4]) }}
{{ Form::textarea('status_text', $travel_user_booking_fewo->status_text, ['class' => 'form-control autoExpand', 'rows'=>1]) }}
</div>
</div>
<hr>
@ -157,7 +159,7 @@
<div class="form-row">
<div class="form-group col-sm-12">
<label class="form-label" for="notice">{{ __('Bemerkung Kunde') }}</label>
{{ Form::textarea('notice', $travel_user_booking_fewo->notice, ['class' => 'form-control', 'rows'=>4]) }}
{{ Form::textarea('notice', $travel_user_booking_fewo->notice, ['class' => 'form-control autoExpand', 'rows'=>1]) }}
</div>
</div>
</div>
@ -166,21 +168,169 @@
<div class="card mb-2">
<div class="card-body">
<div class="text-right">
<button type="submit" name="action" value="createInvoice" class="btn btn-primary">{{ __('Mietbestätigung / Rechnung erstellen') }}</button>&nbsp;
</div>
@if($travel_user_booking_fewo->isInvoice())
<h4>Mietbestätigung / Rechnung
<div class="text-right float-right">
<button type="submit" name="action" value="createInvoice" class="btn btn-primary btn-sm" onclick="return confirm('{{__('Rechnung überschreiben?')}}');">{{ __('Mietbestätigung / Rechnung PDF erstellen') }}</button>&nbsp;
</div>
</h4>
<a class="btn btn-secondary btn-sm" target="_blank" href="{{$travel_user_booking_fewo->getInvoiceUrlFile()}}/file"><i class="fa fa-file-pdf"></i> Mietbestätigung / Rechnung: {{$travel_user_booking_fewo->getInvoiceFileName()}}</a>
Erstellt: <strong>{{$travel_user_booking_fewo->getInvoiceLastModified()}}</strong>
@else
<h4>Mietbestätigung / Rechnung
<div class="text-right float-right">
<button type="submit" name="action" value="createInvoice" class="btn btn-primary btn-sm">{{ __('Mietbestätigung / Rechnung PDF erstellen') }}</button>&nbsp;
</div>
</h4>
@endif
@if($travel_user_booking_fewo->isInvoice())
@if($travel_user_booking_fewo->send_user_mail)
<table class="table table-striped border-bottom mt-4">
<tbody>
@foreach($travel_user_booking_fewo->send_user_mail as $send_user_mail)
<tr>
<td style="width: 25%"><strong>{!! key($send_user_mail) !!}</strong><br>E-Mail versendet.</td>
<td><span class="small">{!! nl2br(current($send_user_mail)) !!}</span></td>
</tr>
@endforeach
</tbody>
</table>
@endif
<div class="form-row">
<div class="form-group col-sm-12">
<label class="form-label" for="send_mail_user_notice">{{ __('Wichtige Hinweise in E-Mail ') }}</label>
{{ Form::textarea('send_mail_user_notice', '', ['class' => 'form-control autoExpand', 'rows'=>1]) }}
</div>
</div>
<div class="text-right mt-2">
<button type="submit" name="action" value="sendMailtoUser" class="btn btn-primary btn-sm" onclick="return confirm('{{__('Mail an Mieter versenden?')}}');">{{ __('E-Mail mit Mietbestätigung / Rechnung und Mietbedingungen an Kunden versenden') }}</button>&nbsp;
</div>
@endif
</div>
</div>
@if($travel_user_booking_fewo->isInvoice())
<div class="card mb-2">
<div class="card-body">
@if($travel_user_booking_fewo->isTravelInfo())
<h4>Anreiseinfo
<div class="text-right float-right">
<button type="submit" name="action" value="createTravelInfo" class="btn btn-primary btn-sm" onclick="return confirm('{{__('Anreiseinfo überschreiben?')}}');">{{ __('Anreiseinfo speichern und PDF erstellen') }}</button>&nbsp;
</div>
</h4>
<p><a class="btn btn-secondary btn-sm" target="_blank" href="{{$travel_user_booking_fewo->getTravelInfoUrlFile()}}/file"><i class="fa fa-file-pdf"></i> {{$travel_user_booking_fewo->getTravelInfoFileName()}}</a>
Erstellt: <strong>{{$travel_user_booking_fewo->getTravelInfoLastModified()}}</strong></p>
@else
<h4>Anreiseinfo
<div class="text-right float-right">
<button type="submit" name="action" value="createTravelInfo" class="btn btn-primary btn-sm">{{ __('Anreiseinfo speichern und PDF erstellen') }}</button>&nbsp;
</div>
</h4>
@endif
<div class="form-row">
<div class="form-group col-sm-12">
<button class="btn btn-default btn-sm " type="button" data-toggle="collapse" data-target="#collapseTravelInfo" aria-expanded="false" aria-controls="collapseTravelInfo">
{{ __('Inhalt für das PDF / Mail') }} <i class="fa fa-angle-down"></i>
</button>
<div class="collapse mt-2" id="collapseTravelInfo">
{{ Form::textarea('info_mail_text', $travel_user_booking_fewo->info_mail_text, ['class' => 'form-control autoExpand', 'rows'=>1, 'id'=>'travel_info_user_text']) }}
<em>Grundtext in ADMIN CMS > <a href="{{route('cms_content')}}">Inhalte</a> > PDF Vorlage Anreiseinfo FeWo</em>
</div>
</div>
</div>
@if($travel_user_booking_fewo->isTravelInfo())
@if($travel_user_booking_fewo->send_info_mail)
<table class="table table-striped border-bottom">
<tbody>
@foreach($travel_user_booking_fewo->send_info_mail as $send_info_mail)
<tr>
<td style="width: 25%"><strong>{!! key($send_info_mail) !!}</strong><br>E-Mail versendet.</td>
<td><span class="small">{!! nl2br(current($send_info_mail)) !!}</span></td>
</tr>
@endforeach
</tbody>
</table>
@endif
<div class="text-right mt-2">
<button type="submit" name="action" value="sendInfosMailtoUser" class="btn btn-primary btn-sm" onclick="return confirm('{{__('Mail an Mieter versenden?')}}');">{{ __('E-Mail mit Anreiseinfo an Kunden versenden') }}</button>&nbsp;
</div>
@endif
</div>
</div>
@endif
@if($travel_user_booking_fewo->isInvoice())
<div class="card mb-2">
<div class="card-body">
<h4>Dienstleister Mail</h4>
@if($travel_user_booking_fewo->send_service_mail)
<table class="table table-striped border-bottom">
<tbody>
@foreach($travel_user_booking_fewo->send_service_mail as $send_service_mail)
<tr>
<td style="width: 25%"><strong>{!! $send_service_mail['d'] !!}</strong><br>{{$send_service_mail['m']}}</td>
<td>{{$send_service_mail['s']}}<br>
<span class="small">{!! nl2br($send_service_mail['c']) !!}</span></td>
</tr>
@endforeach
</tbody>
</table>
@endif
<div class="form-row">
<div class="form-group col-md-6">
<label class="form-label" for="send_mail_service_subject">{{ __('Betreff E-Mail ') }}</label>
{{ Form::text('send_mail_service_subject', $travel_user_booking_fewo->getServiceMailSubject(), ['class' => 'form-control']) }}
</div>
<div class="form-group col-md-6">
<label class="form-label" for="send_mail_service_mail">{{ __('E-Mail Adresse Dienstleister') }}</label>
{{ Form::text('send_mail_service_mail', 'langosch.birgit@web.de', array('class'=>'form-control')) }}
</div>
<div class="form-group col-md-12">
<label class="form-label" for="send_mail_service_content">{{ __('Inhalt E-Mail ') }}</label>
{{ Form::textarea('send_mail_service_content', $travel_user_booking_fewo->getServiceMailContent(), ['class' => 'form-control autoExpand', 'rows'=>1]) }}
</div>
</div>
<div class="text-right mt-2">
<button type="submit" name="action" value="sendMailtoService" class="btn btn-primary btn-sm" onclick="return confirm('{{__('Mail an Dienstleister vor Ort versenden?')}}');">{{ __('E-Mail an Dienstleister vor Ort versenden') }}</button>&nbsp;
</div>
</div>
</div>
@endif
<script>
function floatNumber(n) {
'use strict';
n = n.replace(/\./g, '').replace(',', '.');
return parseFloat(n);
}
function formatNumber(obj) {
n = obj.val();
n = n.replace(/\./g, '').replace(',', '.');
if(isNaN(parseFloat(n))){
obj.val(0);
}
obj.val(parseFloat(n).toFixed(2).replace(".", ","));
}
$( document ).ready(function() {
$('#collapseTravelInfo').on('shown.bs.collapse', function () {
$('#travel_info_user_text').keyup();
});
$('input.input-auto-calc').on('change', function () {
formatNumber($("input[name='price_travel']"));
formatNumber($("input[name='price_service']"));
formatNumber($("input[name='price_deposit']"));
formatNumber($("input[name='price_balance']"));
price_travel = floatNumber($("input[name='price_travel']").val());
price_service = floatNumber($("input[name='price_service']").val());
price_deposit = floatNumber($("input[name='price_deposit']").val());

View file

@ -22,6 +22,7 @@
<th>{{__('Eingetragen')}}</th>
<th>{{__('Status')}}</th>
<th>{{__('Datum')}}</th>
<th>{{__('R.-Nr.')}}</th>
<th style="max-width: 60px;">{{__('delete')}}</th>
</tr>
</thead>
@ -34,7 +35,6 @@
<script>
$( document ).ready(function() {
$('#datatables-default').dataTable({
"processing": true,
"serverSide": true,
@ -50,6 +50,7 @@
{ data: 'is_calendar', name: 'is_calendar', orderable: false },
{ data: 'status_name', name: 'status_name' },
{ data: 'booking_date', name: 'booking_date' },
{ data: 'invoice_number', name: 'invoice_number' },
{ data: 'action_delete', orderable: false, searchable: false},
],
"order": [[ 1, "desc" ]],
@ -58,10 +59,8 @@
"language": {
"url": "/js/German.json"
},
/*initComplete: function () {
/*
initComplete: function () {
this.api().columns(2).every( function () {
var column = this;
var title = $(column.header()).html();

View file

@ -16,11 +16,18 @@
</div>
@endif
{!! Form::open(['url' => route('travel_user_detail', [$id]), 'class' => 'form-horizontal']) !!}
<h4 class="font-weight-bold py-3 mb-1">
Kunden @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
<div class="float-right">
<button type="submit" name="action" value="saveAll" class="btn btn-submit btn-sm">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('travel_user_booking_fewos')}}" class="btn btn-default btn-sm">{{ __('back') }}</a>
</div>
</h4>
<div class="clearfix"></div>
{!! Form::open(['url' => route('travel_user_detail', [$id]), 'class' => 'form-horizontal']) !!}
<input type="hidden" name="id" id="id" value="{{$id}}">
@include('travel.user.form')

View file

@ -18,13 +18,13 @@
{!! Form::open(['url' => route('user_edit'), 'class' => 'form-horizontal', 'id'=>'lead-form-validation']) !!}
<input type="hidden" name="user_id" id="user_id" value="@if($user->id>0){{$user->id}}@else new @endif">
@include('user.form')
<div class="text-left mt-3">
<button type="submit" class="btn btn-secondary">{{ __('save changes') }}</button>&nbsp;
<a href="{{route('home')}}" class="btn btn-default">{{ __('back') }}</a>
</div>
{!! Form::close() !!}

View file

@ -62,15 +62,44 @@ Route::get('/user/update_email_confirm/{token}', 'UserUpdateEmailController@acti
Route::group(['middleware' => ['auth']], function()
{
Route::get('storage/{type?}/{file?}', function($type = null, $file = null)
{
if($type == 'xls'){
Route::get('storage/{type?}/{class?}/{year?}/{file?}/{do?}', function($type = null, $class = null, $year = null, $file = null, $do = null) {
/*if ($type == 'xls') {
$path = storage_path("app/export/");
$filename = $file.'.xls';
$filename = $file . '.xls';
}*/
$path = "";
$filename = "";
$headers = [];
if ($class == 'invoices'){
if ($type == 'fewo') {
$headers = array('Content-Type: application/pdf',);
$dir = $year."/";
$filename = $file;
if(Storage::disk('fewo_invoices')->exists( $dir.$filename )){
$path = Storage::disk('fewo_invoices')->path($dir.$filename);
}
}
}
if (file_exists($path.$filename)) {
return Response::download($path.$filename, $filename);
if ($class == 'infos'){
if ($type == 'fewo') {
$headers = array('Content-Type: application/pdf',);
$dir = $year."/";
$filename = $file;
if(Storage::disk('fewo_infos')->exists( $dir.$filename )){
$path = Storage::disk('fewo_infos')->path($dir.$filename);
}
}
}
if (file_exists($path)) {
if($do == "download"){
return Response::download($path, $filename, $headers);
}
if($do == "file"){
return Response::file($path, $headers);
}
}
})->name('storage');
@ -257,18 +286,17 @@ Route::group(['middleware' => ['superadmin']], function() {
});
/*
use App\Mail\MailResetPassword;
Route::get('/send_test_email', function(){
try {
Mail::to('kevin.adametz@me.com')->send(new MailResetPassword('asdasd', Auth::user()));
//Mail::to('kevin.adametz@me.com')->send(new MailResetPassword('asdasd', Auth::user()));
Mail::raw('Sending emails with Mailgun and Laravel is easy!', function($message) {
$message->to('kevin.adametz@me.com', 'Kevin Adametz');
$message->subject('testing Networktrips');
});
Mail::raw('Sending emails with Mailgun and Laravel is easy!', function($message) {
$message->to('kevin.adametz@me.com', 'Kevin Adametz');
$message->subject('testing Networktrips');
});
@ -277,8 +305,9 @@ Route::get('/send_test_email', function(){
}
$fail = Mail::failures();
dd($fail);
if(!empty($fail)) throw new \Exception('Could not send message to '.$fail[0]);
if(!empty($fail)) throw new \Exception('Could not send message to '.$fail[0]);
});
*/

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.