Teilnehmer extra, Emails Anfragen Order

This commit is contained in:
Kevin Adametz 2021-09-15 19:11:38 +02:00
parent a718baf971
commit 5e3bd3a1ba
19 changed files with 174 additions and 48 deletions

View file

@ -90,12 +90,17 @@ class BookingController extends Controller
'end_date' => $travel_booking->selected_end_date->format('Y-m-d'),
'website_id' => 1,
'travel_number' => isset($travel_booking->selected_travel['travel_number']) ? $travel_booking->selected_travel['travel_number'] : null,
'participant_name' => isset($travel_booking->participants[0]['last_name']) ? $travel_booking->participants[0]['last_name'] : null,
/*'participant_name' => isset($travel_booking->participants[0]['last_name']) ? $travel_booking->participants[0]['last_name'] : null,
'participant_firstname' => isset($travel_booking->participants[0]['first_name']) ? $travel_booking->participants[0]['first_name'] : null,
'participant_birthdate' => isset($travel_booking->participants[0]['birthday']) ? date( "Y-m-d", strtotime($travel_booking->participants[0]['birthday'])) : null,
'participant_salutation_id' => isset($travel_booking->participants[0]['gender']) ? $travel_booking->participants[0]['gender'] : null,
'nationality_id' => isset($travel_booking->participants[0]['nationality']) ? $travel_booking->participants[0]['nationality'] : null,
'travel_company_id' => isset($travel_booking->service_items[0]['travel_company_id']) ? $travel_booking->service_items[0]['travel_company_id'] : null,
'nationality_id' => isset($travel_booking->participants[0]['nationality']) ? $travel_booking->participants[0]['nationality'] : null,*/
'participant_name' => null,
'participant_firstname' => null,
'participant_birthdate' => null,
'participant_salutation_id' => null,
'nationality_id' => null,
'travel_company_id' => null,
'price' => $travel_booking->price,
'price_total' => $travel_booking->price_total,
'deposit_total' => $travel_booking->deposit_total,
@ -110,7 +115,6 @@ class BookingController extends Controller
//createTraveler
if($travel_booking->participants){
foreach ($travel_booking->participants as $key => $participant){
if($key > 0){
Participant::create([
'booking_id' => $booking->id,
'participant_name' => $participant['last_name'],
@ -120,7 +124,7 @@ class BookingController extends Controller
'participant_child' => $participant['child'],
'nationality_id' =>$participant['nationality'],
]);
}
}
}

View file

@ -124,11 +124,6 @@ class BookingController extends Controller
return redirect(route('booking_detail', [$booking->id])."#collapseBookingParticipant");
}
if($id === "new") {
$booking = new Booking();
}else{

View file

@ -43,7 +43,6 @@ class EmailsController extends Controller
'fewo_email_files' => CMSContent::where('identifier', '=', $this->identifier_fewo_file)->get()->sortByDesc('pos'),
'customer_fewo_mail_dirs' => BookingFewo::getCustomerMailDirs(),
'lead_email_files' => CMSContent::where('identifier', '=', $this->identifier_lead_file)->get()->sortByDesc('pos'),
'customer_lead_mail_dirs' => Lead::getCustomerMailDirs(),
'step' => $step
];

View file

@ -206,11 +206,12 @@ class BookingRepository extends BaseRepository {
}
}
//main
$this->model->participant_salutation_id = isset($data['participant_salutation_id']) ? $data['participant_salutation_id'] : 1;
$this->model->participant_name = isset($data['participant_name']) ? $data['participant_name'] : "";
$this->model->participant_firstname = isset($data['participant_firstname']) ? $data['participant_firstname'] : "";
$this->model->nationality_id = isset($data['nationality_id']) ? $data['nationality_id'] : 1;
$this->model->participant_birthdate = isset($data['participant_birthdate']) ? _reformat_date($data['participant_birthdate']) : 1;
$this->model->participant_salutation_id = isset($data['participant_salutation_id']) ? $data['participant_salutation_id'] : null;
$this->model->participant_name = isset($data['participant_name']) ? $data['participant_name'] : null;
$this->model->participant_firstname = isset($data['participant_firstname']) ? $data['participant_firstname'] : null;
$this->model->nationality_id = isset($data['nationality_id']) ? $data['nationality_id'] : null;
$this->model->participant_birthdate = isset($data['participant_birthdate']) ? _reformat_date($data['participant_birthdate']) : null;
$this->model->save();
return $this->model;
}

View file

@ -371,7 +371,6 @@ class LeadMailRepository extends BaseRepository {
$value->subtitle = "Die E-Mail wird im System gespeichert.";
if($data['id'] === 'reply-save'){
$value->subtitle = "Die E-Mail wird im System als Antwort gespeichert.";
}
$value->url = $data['url'];
$value->show = 'reply';

View file

@ -2,18 +2,39 @@
namespace App\Services;
use App\Models\Airline;
use App\Models\CMSContent;
use App\Models\Insurance;
use App\Models\CMSContent;
use App\Models\CustomerMail;
use App\Models\TravelCompany;
class Booking
{
private static $output_dirs = [];
public static function contentFiles(){
$booking_email_files = CMSContent::where('identifier', '=', 'booking-email-file')->get()->sortByDesc('pos')->pluck('slug', 'id');
return $booking_email_files;
}
public static function setOutputDirs($dir, $subdir){
self::$output_dirs[$dir][] = $subdir;
}
public static function getMailDirNotInOutput($booking_id, $dir){
$is_o_dirs = isset(self::$output_dirs[$dir]) ? self::$output_dirs[$dir] : [];
$ret = [];
$CustomerMails = CustomerMail::whereBookingId($booking_id)->whereDir($dir)->get();
if($CustomerMails){
foreach($CustomerMails as $CustomerMail){
if(!in_array($CustomerMail->subdir, $is_o_dirs)){
$ret[] = $CustomerMail->subdir;
}
}
}
return $ret;
}
public static function getCustomerMailDirs(){
$customer_mail_dirs = CMSContent::where('identifier', '=', 'customer-mail-dirs')->get()->sortBy('pos');
return $customer_mail_dirs;
@ -23,7 +44,7 @@ class Booking
public static function getCustomerMailDir($id){
return CMSContent::where('identifier', '=', 'customer-mail-dirs')->where('pos', '=', $id)->first();
}
public static function getCustomerMailName($customer_mail_dir, $mail_dir_id){
switch ($customer_mail_dir->getArrayContent('model')){

View file

@ -4,23 +4,43 @@ namespace App\Services;
use App\Models\Airline;
use App\Models\CMSContent;
use App\Models\Insurance;
use App\Models\LeadMail;
use App\Models\TravelCompany;
class Lead
{
private static $output_dirs = [];
public static function contentFiles(){
$lead_files = CMSContent::where('identifier', '=', 'lead-email-file')->get()->sortByDesc('pos')->pluck('slug', 'id');
return $lead_files;
}
public static function setOutputDirs($dir, $subdir){
self::$output_dirs[$dir][] = $subdir;
}
public static function getMailDirNotInOutput($lead_id, $dir){
$is_o_dirs = isset(self::$output_dirs[$dir]) ? self::$output_dirs[$dir] : [];
$ret = [];
$LeadMails = LeadMail::whereLeadId($lead_id)->whereDir($dir)->get();
if($LeadMails){
foreach($LeadMails as $LeadMail){
if(!in_array($LeadMail->subdir, $is_o_dirs)){
$ret[] = $LeadMail->subdir;
}
}
}
return $ret;
}
public static function getCustomerMailDirs(){
$customer_mail_dirs = CMSContent::where('identifier', '=', 'customer-lead-mail-dirs')->get()->sortBy('pos');
$customer_mail_dirs = CMSContent::where('identifier', '=', 'customer-mail-dirs')->get()->sortBy('pos');
return $customer_mail_dirs;
}
public static function getCustomerMailDir($id){
return CMSContent::where('identifier', '=', 'customer-lead-mail-dirs')->where('pos', '=', $id)->first();
return CMSContent::where('identifier', '=', 'customer-mail-dirs')->where('pos', '=', $id)->first();
}
public static function getCustomerMailName($lead_mail_dir, $mail_dir_id){

View file

@ -27,6 +27,11 @@ class Model
}
public static function getTravelCountryCRMArray($emtpy = false){
$TravelCountry = TravelCountry::where('active_backend', 1)->orderBy('name')->get()->pluck('name', 'crm_id');
return $emtpy ? $TravelCountry->prepend('-', 0) : $TravelCountry;
}
public static function getTravelCategoryArray($emtpy = false){
$TravelCategory = TravelCategory::orderBy('name')->get()->pluck('name', 'id');
return $emtpy ? $TravelCategory->prepend('-', 0) : $TravelCategory;
@ -72,6 +77,10 @@ class Model
return $emtpy ? $Salutation->prepend('-', 0) : $Salutation;
}
public static function getSalutationById($id){
$Salutation = Salutation::find($id);
return $Salutation ? $Salutation->name : '';
}
public static function getTravelNationalityArray($emtpy = false){
$TravelNationality = TravelNationality::where('active', true)->orderBy('name')->get()->pluck('name', 'id');
return $emtpy ? $TravelNationality->prepend('-', 0) : $TravelNationality;

View file

@ -19,6 +19,7 @@ class Placeholder
'program' => '#Programm#',
'start_date' => '#Anreisedatum#',
'end_date' => '#Abreisedatum#',
'participants' => '#Teilnehmer#',
'booking_date' => '#Buchungsdatum#',
'airline' => '#Airline#'
];
@ -54,6 +55,26 @@ class Placeholder
$end_date = $booking->getEndDateFormat();
$booking_date = $booking->getBookingDateFormat();
$airline = $booking->airline ? $booking->airline->name_full : '-';
$participants = "Teilnehmer:<br>";
//first
if($booking->participant_firstname){
$participants .= $booking->participant_salutation_id ? \App\Services\Model::getSalutationById($booking->participant_salutation_id)." " : '';
$participants .= $booking->participant_firstname." ".$booking->participant_name;
$participants .= $booking->participant_birthdate ? ' | '._format_date($booking->participant_birthdate) : '';
$participants .= $booking->travel_nationality ? ' | '.$booking->travel_nationality->name : '';
$participants .= '<br>';
}
if($booking->participants->count()){
foreach($booking->participants as $participant){
$participants .= $participant->salutation ? $participant->salutation->name." " : '';
$participants .= $participant->participant_firstname." ".$participant->participant_name;
$participants .= $participant->participant_birthdate ? ' | '._format_date($participant->participant_birthdate) : '';
$participants .= $participant->travel_nationality ? ' | '.$participant->travel_nationality->name : '';
$participants .= $participant->participant_child ? ' | Kind' : '';
$participants .= '<br>';
}
}
$search = [];
$replace = [];
@ -79,6 +100,7 @@ class Placeholder
$start_date = $booking_fewo->from_date;
$end_date = $booking_fewo->to_date;
$booking_date = $booking_fewo->booking_date;
$participants = "";
$airline = "";
$search = [];
$replace = [];
@ -103,10 +125,23 @@ class Placeholder
$program = "";
$salutation = $lead->customer->salutation_id == 1 ? 'Herr' : 'Frau';
$start_date = $lead->travelperiod_start ? _format_date($lead->travelperiod_start) : '';
$end_date = $lead->travelperiod_end ? _format_date($lead->travelperiod_end) : '';;
$booking_date = $lead->request_date ? _format_date($lead->request_date) : '';;
$end_date = $lead->travelperiod_end ? _format_date($lead->travelperiod_end) : '';
$booking_date = $lead->request_date ? _format_date($lead->request_date) : '';
$participants = "";
$airline = "";
if($lead->lead_participants->count()){
$participants = "Teilnehmer:<br>";
foreach($lead->lead_participants as $participant){
$participants .= $participant->salutation ? $participant->salutation->name." " : '';
$participants .= $participant->participant_firstname." ".$participant->participant_name;
$participants .= $participant->participant_birthdate ? ' | '._format_date($participant->participant_birthdate) : '';
//$participants .= $participant->participant_child ? ' | Kind' : ' | Erwachsener';
//$participants .= $participant->travel_nationality ? ' | '.$participant->travel_nationality->name : '';
$participants .= '<br>';
}
}
$search = [];
$replace = [];

View file

@ -71,19 +71,36 @@
</div>
<div class="badge {{$badge}}">{{$booking->countCustomerMailsBy($customer_mail_dir->pos)}}</div>
</a>
@if($booking->travel_country)
@foreach($booking->travel_country->getMailDirs($customer_mail_dir->pos) as $mail_dir_id)
@php ($mail_dir_name = \App\Services\Booking::getCustomerMailName($customer_mail_dir, $mail_dir_id))
<a href="javascript:void(0)" class="d-flex justify-content-between align-items-center py-1 px-4 sidebox-nav-item sidebox-nav-item_sub"
data-dir="{{$customer_mail_dir->pos}}" data-subdir="{{$mail_dir_id}}" data-icon="{{$customer_mail_dir->getArrayContent('icon')}}" data-name="{{$mail_dir_name}}">
<div class="item pl-2">
<i class="ion {{$customer_mail_dir->getArrayContent('icon')}}"></i> {{$mail_dir_name}}
</div>
<div class="badge {{$badge}}">{{$booking->countCustomerMailsBy($customer_mail_dir->pos, $mail_dir_id)}}</div>
</a>
@endforeach
@php (\App\Services\Booking::setOutputDirs($customer_mail_dir->pos, 0))
@foreach($booking->travel_country->getMailDirs($customer_mail_dir->pos) as $mail_sdir_id)
@php ($mail_dir_name = \App\Services\Booking::getCustomerMailName($customer_mail_dir, $mail_sdir_id))
<a href="javascript:void(0)" class="d-flex justify-content-between align-items-center py-1 px-4 sidebox-nav-item sidebox-nav-item_sub"
data-dir="{{$customer_mail_dir->pos}}" data-subdir="{{$mail_sdir_id}}" data-icon="{{$customer_mail_dir->getArrayContent('icon')}}" data-name="{{$mail_dir_name}}">
<div class="item pl-2">
<i class="ion {{$customer_mail_dir->getArrayContent('icon')}}"></i> {{$mail_dir_name}}
</div>
<div class="badge {{$badge}}">{{$booking->countCustomerMailsBy($customer_mail_dir->pos, $mail_sdir_id)}}</div>
</a>
@php (\App\Services\Booking::setOutputDirs($customer_mail_dir->pos, $mail_sdir_id))
@endforeach
@if($mail_dirs_not_outputs = \App\Services\Booking::getMailDirNotInOutput($booking->id, $customer_mail_dir->pos))
@foreach($mail_dirs_not_outputs as $mail_sdir_id)
@php ($mail_dir_name = \App\Services\Booking::getCustomerMailName($customer_mail_dir, $mail_sdir_id))
<a href="javascript:void(0)" class="d-flex justify-content-between align-items-center py-1 px-4 sidebox-nav-item sidebox-nav-item_sub"
data-dir="{{$customer_mail_dir->pos}}" data-subdir="{{$mail_sdir_id}}" data-icon="{{$customer_mail_dir->getArrayContent('icon')}}" data-name="{{$mail_dir_name}}">
<div class="item pl-2">
<i class="ion {{$customer_mail_dir->getArrayContent('icon')}}"></i> {{$mail_dir_name}}
</div>
<div class="badge {{$badge}}">{{$booking->countCustomerMailsBy($customer_mail_dir->pos, $mail_sdir_id)}}</div>
</a>
@php (\App\Services\Booking::setOutputDirs($customer_mail_dir->pos, $mail_sdir_id))
@endforeach
@endif
@endif
@endforeach
@foreach($booking::$customer_mail_dirs as $dir_id => $customer_mail_dir)
@php($badge = "badge-outline-primary")
<a href="javascript:void(0)" class="d-flex justify-content-between align-items-center py-2 px-4 sidebox-nav-item"

View file

@ -18,6 +18,7 @@
</tr>
</thead>
<tbody>
@if($booking->participant_firstname)
<tr>
<th scope="row">
{{ Form::select('participant_salutation_id', \App\Services\Model::getSalutationArray(false) , $booking->participant_salutation_id, array('class'=>'custom-select', 'id'=>'participant_salutation_id')) }}
@ -42,6 +43,7 @@
&nbsp;
</td>
</tr>
@endif
@if($booking->participants)
@foreach($booking->participants as $item)

View file

@ -45,7 +45,7 @@
<div class="form-group col-sm-6 col-md-4">
<label for="travelcountry_id" class="form-label">{{ __('Reiseland') }}*</label>
{{ Form::select('travelcountry_id', \App\Services\Model::getTravelCountryArray(true) , $lead->travelcountry_id, array('class'=>'custom-select')) }}
{{ Form::select('travelcountry_id', \App\Services\Model::getTravelCountryCRMArray(true) , $lead->travelcountry_id, array('class'=>'custom-select')) }}
</div>
<div class="form-group col-sm-6 col-md-4">

View file

@ -13,7 +13,7 @@
<div class="py-3 px-4">
<div class="media align-items-center">
<div class="media-body text-center">
<button type="button" class="btn btn-sm btn-secondary mb-3 btn-compare-customer-mails" data-toggle="modal"
<button type="button" class="btn btn-sm btn-secondary mb-3 btn-compare-lead-mails" data-toggle="modal"
data-target="#modals-load-content"
data-id="new-send"
data-model="LeadMail"
@ -25,7 +25,7 @@
data-lead_mail_subdir="0"
data-route="{{ route('lead_mail_modal_load') }}"><i class="ion ion-md-mail-open"></i>&nbsp;E-Mail schreiben</button>
<button type="button" class="btn btn-sm btn-next btn-compare-customer-mails" data-toggle="modal"
<button type="button" class="btn btn-sm btn-next btn-compare-lead-mails" data-toggle="modal"
data-target="#modals-load-content"
data-id="new-save"
data-model="LeadMail"
@ -69,6 +69,33 @@
</div>
<div class="badge {{$badge}}">{{$lead->countLeadMailsBy($lead_mail_dir->pos)}}</div>
</a>
@if($lead->travel_country)
@php (\App\Services\Lead::setOutputDirs($lead_mail_dir->pos, 0))
@foreach($lead->travel_country->getMailDirs($lead_mail_dir->pos) as $mail_sdir_id)
@php ($mail_dir_name = \App\Services\Lead::getCustomerMailName($lead_mail_dir, $mail_sdir_id))
<a href="javascript:void(0)" class="d-flex justify-content-between align-items-center py-1 px-4 sidebox-nav-item sidebox-nav-item_sub"
data-dir="{{$lead_mail_dir->pos}}" data-subdir="{{$mail_sdir_id}}" data-icon="{{$lead_mail_dir->getArrayContent('icon')}}" data-name="{{$mail_dir_name}}">
<div class="item pl-2">
<i class="ion {{$lead_mail_dir->getArrayContent('icon')}}"></i> {{$mail_dir_name}}
</div>
<div class="badge {{$badge}}">{{$lead->countLeadMailsBy($lead_mail_dir->pos, $mail_sdir_id)}}</div>
</a>
@php (\App\Services\Lead::setOutputDirs($lead_mail_dir->pos, $mail_sdir_id))
@endforeach
@if($mail_dirs_not_outputs = \App\Services\Lead::getMailDirNotInOutput($lead->id, $lead_mail_dir->pos))
@foreach($mail_dirs_not_outputs as $mail_sdir_id)
@php ($mail_dir_name = \App\Services\Lead::getCustomerMailName($lead_mail_dir, $mail_sdir_id))
<a href="javascript:void(0)" class="d-flex justify-content-between align-items-center py-1 px-4 sidebox-nav-item sidebox-nav-item_sub"
data-dir="{{$lead_mail_dir->pos}}" data-subdir="{{$mail_sdir_id}}" data-icon="{{$lead_mail_dir->getArrayContent('icon')}}" data-name="{{$mail_dir_name}}">
<div class="item pl-2">
<i class="ion {{$lead_mail_dir->getArrayContent('icon')}}"></i> {{$mail_dir_name}}
</div>
<div class="badge {{$badge}}">{{$lead->countLeadMailsBy($lead_mail_dir->pos, $mail_sdir_id)}}</div>
</a>
@php (\App\Services\Lead::setOutputDirs($lead_mail_dir->pos, $mail_sdir_id))
@endforeach
@endif
@endif
@endforeach
@foreach($lead::$lead_mail_dirs as $dir_id => $lead_mail_dir)
@php($badge = "badge-outline-primary")

View file

@ -102,21 +102,19 @@
<button type="submit" class="btn btn-xs btn-default float-right mt-1"><i class="ion ion-ios-redo"></i>&nbsp; verschieben</button>
<label for="subdir" class="form-label">&nbsp;</label>
{{-- TODO load subdirs by pos id
@if($lead_mail->booking->travel_country)
@foreach(\App\Services\Booking::getCustomerMailDirs() as $lead_mail_dir)
@if($lead_mail->lead->travel_country)
@foreach(\App\Services\Lead::getCustomerMailDirs() as $lead_mail_dir)
@if($lead_mail_dir->pos > 0)
<select class="custom-select lead_mail_subdir" name="subdir" id="lead_mail_subdir_{{$lead_mail_dir->pos}}">
<option value="0">keinen Unterordner</option>
@foreach($lead_mail->booking->travel_country->getMailDirs($lead_mail_dir->pos) as $mail_dir_id)
@php ($mail_dir_name = \App\Services\Booking::getCustomerMailName($lead_mail_dir, $mail_dir_id))
@foreach($lead_mail->lead->travel_country->getMailDirs($lead_mail_dir->pos) as $mail_dir_id)
@php ($mail_dir_name = \App\Services\Lead::getCustomerMailName($lead_mail_dir, $mail_dir_id))
<option value="{{$mail_dir_id}}" @if($lead_mail->subdir == $mail_dir_id) selected @endif>{{$mail_dir_name}}</option>
@endforeach
</select>
@endif
@endforeach
@endif
--}}
</div>
</div>
{!! Form::close() !!}

View file

@ -233,7 +233,7 @@
<div class="tab-pane fade @if($step === 'settings') active show @endif" id="navs-top-settings">
<div class="card">
<h4 class="mt-4 mb-2 ml-4">Ordner für Buchungen/E-Mail Ablage</h4>
<h4 class="mt-4 mb-2 ml-4">Ordner für Buchungen+Anfrage/E-Mail Ablage</h4>
<p class="ml-4">Unterordner werden für das jeweilige Reiseland der Buchung unter <a href="{{route('admin_settings_travel_country')}}">Reiseländer</a> -> Land / E-Mails zugewiesen </p>
<div class="card-datatable table-responsive pt-0">
<table class="datatables-customer-mail-dirs table table-striped table-bordered">
@ -559,7 +559,7 @@
<!-- Lead Anfragen -->
<h4 class="mt-4 mb-2 ml-4">Ordner für Anfragen/E-Mail Ablage</h4>
{{-- <h4 class="mt-4 mb-2 ml-4">Ordner für Anfragen/E-Mail Ablage</h4>
<div class="card-datatable table-responsive pt-0">
<table class="datatables-customer-lead-mail-dirs table table-striped table-bordered">
<thead>
@ -594,7 +594,6 @@
<td>
{!! \App\Services\Util::_implodeLines( $customer_lead_mail_dir->getArrayContent('emails'), "<br>") !!}
</td>
{{-- <td><a class="text-danger" href="" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a></td> --}}
</tr>
@php($next_customer_lead_mail_dir_id = $customer_lead_mail_dir->pos+1)
@endforeach
@ -667,7 +666,7 @@
</form>
</div>
</div>
</div>--}}
<hr>
<h4 class="mt-2 mb-0 ml-4">Allgemeine PDF Dateien für Anfragen/E-Mail-Anhänge</h4>