This commit is contained in:
Kevin Adametz 2022-06-15 18:05:16 +02:00
parent 34a3d2196b
commit 93d1bea8e3
45 changed files with 1601 additions and 573 deletions

2
.env
View file

@ -6,7 +6,7 @@ APP_URL=https://mein.sterntours.test
APP_OLD_URL=https://cms-stern-tours.test
#APP_URL_V2=https://v2.stern-tours.de
APP_URL_V2=https://v2-sterntours.test
APP_URL_V2=https://v2.sterntours.test
#APP_URL_STERN=https://www.sterntours.de
APP_URL_STERN=https://sterntours.test

View file

@ -3,24 +3,25 @@
namespace App\Http\Controllers;
use App\Models\BookingApplication;
use App\Models\BookingConfirmation;
use App\Models\BookingStorno;
use App\Models\BookingVoucher;
use App\Models\Coupon;
use App\Models\FewoLodging;
use App\Models\InsuranceCertificate;
use App\Models\TravelInsurance;
use App\Repositories\CustomerFileRepository;
use App\Services\BookingFewo;
use App\Services\CreateCouponPDF;
use App\Services\CreatePDF;
use App\Services\Util;
use Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Facades\URL;
use Request;
use Response;
use App\Models\Coupon;
use App\Services\Util;
use App\Models\FewoLodging;
use App\Services\CreatePDF;
use App\Models\BookingStorno;
use App\Services\BookingFewo;
use App\Models\BookingVoucher;
use App\Models\TravelInsurance;
use App\Services\CreateCouponPDF;
use App\Models\BookingApplication;
use App\Models\BookingConfirmation;
use Illuminate\Support\Facades\URL;
use App\Models\BookingVoucherAgency;
use App\Models\InsuranceCertificate;
use App\Repositories\CustomerFileRepository;
use Illuminate\Database\Eloquent\Collection;
class CustomerFileController extends Controller
{
@ -75,9 +76,16 @@ class CustomerFileController extends Controller
}
break;
case 'booking_voucher':
if($booking_vouchers = BookingVoucher::find($id)){
$filename = "Voucher-".$booking_vouchers->booking->getBookingNumber().".pdf";
$file = base64_decode($booking_vouchers->binary_data);
if($booking_voucher = BookingVoucher::find($id)){
$filename = "Voucher-".$booking_voucher->booking->getBookingNumber().".pdf";
$file = base64_decode($booking_voucher->binary_data);
}
break;
case 'booking_voucher_agency':
if($booking_voucher_agency = BookingVoucherAgency::find($id)){
$filename = "Voucher-Agentur-".$booking_voucher_agency->booking->getBookingNumber().".pdf";
$file = base64_decode($booking_voucher_agency->binary_data);
}
break;
case 'insurance_certificate':

View file

@ -48,8 +48,8 @@ class TravelAgendaController extends Controller
public function delete($id){
if(Booking::where('travelagenda_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird verwendet');
if(Booking::where('travelagenda_id', $id)->count()){
\Session()->flash('alert-error', 'Eintrag wird bei Buchnungen verwendet');
return redirect()->back();
}

View file

@ -0,0 +1,62 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use App\Models\TravelArrivalPoint;
use Request;
class TravelArrivalPointController extends Controller
{
public function __construct()
{
$this->middleware(['superadmin', '2fa']);
}
public function index($step = false)
{
$data = [
'travel_arrival_point' => TravelArrivalPoint::all(),
];
return view('settings.travel_arrival_point.index', $data);
}
public function update(){
$data = Request::all();
if($data['id'] === "new"){
$model = TravelArrivalPoint::create([
'name' => $data['name'],
'active' => isset($data['active']) ? true : false,
'travel_country_id' => $data['travel_country_id'],
]);
}else{
$model = TravelArrivalPoint::find($data['id']);
$model->name = $data['name'];
$model->active = isset($data['active']) ? true : false;
$model->travel_country_id = $data['travel_country_id'];
$model->save();
}
\Session()->flash('alert-save', '1');
return redirect(route('admin_settings_travel_arrival_point'));
}
public function delete($id){
$model = TravelArrivalPoint::findOrFail($id);
if($model->travel_programs->count() > 0){
\Session()->flash('alert-error', 'Eintrag wird bei Reiseprogrammen verwendet');
return redirect()->back();
}
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect()->back();
}
}

View file

@ -0,0 +1,67 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use App\Models\TravelCategory;
use Request;
class TravelCategoryController extends Controller
{
public function __construct()
{
$this->middleware(['superadmin', '2fa']);
}
public function index($step = false)
{
$data = [
'travel_category' => TravelCategory::all(),
];
return view('settings.travel_category.index', $data);
}
public function update(){
$data = Request::all();
if($data['id'] === "new"){
$model = TravelCategory::create([
'name' => $data['name'],
'active' => isset($data['active']) ? true : false
]);
}else{
$model = TravelCategory::find($data['id']);
$model->name = $data['name'];
$model->active = isset($data['active']) ? true : false;
$model->save();
}
\Session()->flash('alert-save', '1');
return redirect(route('admin_settings_travel_category'));
}
public function delete($id){
$model = TravelCategory::findOrFail($id);
if($model->bookings->count() > 0){
\Session()->flash('alert-error', 'Eintrag wird bei Buchnungen verwendet');
return redirect()->back();
}
if($model->travel_programs->count() > 0){
\Session()->flash('alert-error', 'Eintrag wird bei Programmen verwendet');
return redirect()->back();
}
if($model->leads->count() > 0){
\Session()->flash('alert-error', 'Eintrag wird bei Anfragen verwendet');
return redirect()->back();
}
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect()->back();
}
}

View file

@ -0,0 +1,56 @@
<?php
namespace App\Http\Controllers\Settings;
use App\Http\Controllers\Controller;
use App\Models\TravelGerneralNote;
use Request;
class TravelGerneralNotesController extends Controller
{
public function __construct()
{
$this->middleware(['superadmin', '2fa']);
}
public function index($step = false)
{
$data = [
'gerneral_notes' => TravelGerneralNote::all(),
];
return view('settings.gerneral_notes.index', $data);
}
public function update(){
$data = Request::all();
if($data['id'] === "new"){
$model = TravelGerneralNote::create([
'name' => $data['name'],
'text' => $data['text']
]);
}else{
$model = TravelGerneralNote::find($data['id']);
$model->name = $data['name'];
$model->text = $data['text'];
$model->save();
}
\Session()->flash('alert-save', '1');
return redirect(route('admin_settings_gerneral_notes'));
}
public function delete($id){
$model = TravelGerneralNote::findOrFail($id);
if($model->travel_programs->count() > 0){
\Session()->flash('alert-error', 'Eintrag wird bei Reiseprogrammen verwendet');
return redirect()->back();
}
$model->delete();
\Session()->flash('alert-success', 'Eintrag gelöscht');
return redirect()->back();
}
}

View file

@ -48,10 +48,23 @@ class TravelProgramController extends Controller
public function store($id)
{
//TODO new must have an extra funtction!
$data = Request::all();
$program = $this->travelProgramRepo->update($data);
\Session()->flash('alert-save', '1');
return redirect(route('travel_program_detail', [$program->id]));
if(!isset($data['action'])){
abort(403, 'keine Action');
}
if($data['action'] === 'saveGeneral'){
$program = $this->travelProgramRepo->updateGeneral($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('travel_program_detail', [$program->id])."#collapseBookingNotice");
}
if($data['action'] === 'saveDetails'){
$program = $this->travelProgramRepo->updateDetail($id, $data);
\Session()->flash('alert-save', '1');
return redirect(route('travel_program_detail', [$program->id])."#collapseTravelProgramDetails");
}
return redirect(route('travel_program_detail', [$id]));
}
@ -68,6 +81,7 @@ class TravelProgramController extends Controller
\Session()->flash('alert-save', '1');
return redirect(route('travel_program_detail', [$data['program_id']]));
}
public function classDelete($id){
$travel_class = TravelClass::findOrFail($id);
$pId = $travel_class->program_id;

View file

@ -66,6 +66,7 @@ use Illuminate\Database\Eloquent\Collection;
* @property Collection|BookingInvoice[] $booking_invoices
* @property Collection|BookingServiceItem[] $booking_service_items
* @property Collection|BookingVoucher[] $booking_vouchers
* @property Collection|BookingVoucherAgency[] $booking_voucher_agencys
* @property Collection|Coupon[] $coupons
* @property Collection|InsuranceCertificate[] $insurance_certificates
* @property Collection|Participant[] $participants
@ -155,6 +156,7 @@ use Illuminate\Database\Eloquent\Collection;
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\BookingStorno[] $booking_stornos
* @property-read int|null $booking_stornos_count
* @property-read int|null $booking_vouchers_count
* @property-read int|null $booking_voucher_agencys_count
* @property-read int|null $travel_insurances_count
* @property string|null $origin_start_date
* @property \Illuminate\Support\Carbon|null $lawyer_date
@ -496,6 +498,11 @@ class Booking extends Model
return $this->hasMany(BookingVoucher::class);
}
public function booking_voucher_agencys()
{
return $this->hasMany(BookingVoucherAgency::class);
}
public function travel_insurances()
{
return $this->hasMany(TravelInsurance::class);

View file

@ -0,0 +1,49 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class BookingVoucherAgency
*
* @property int $id
* @property int $booking_id
* @property boolean $binary_data
* @property Carbon $created_at
* @property Carbon $updated_at
* @property Booking $booking
* @package App\Models
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingVoucherAgency newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingVoucherAgency newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingVoucherAgency query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingVoucherAgency whereBinaryData($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingVoucherAgency whereBookingId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingVoucherAgency whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingVoucherAgency whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\BookingVoucherAgency whereUpdatedAt($value)
* @mixin \Eloquent
*/
class BookingVoucherAgency extends Model
{
protected $table = 'booking_voucher_agency';
protected $casts = [
'booking_id' => 'int',
];
protected $fillable = [
'booking_id',
'binary_data'
];
public function booking()
{
return $this->belongsTo(Booking::class);
}
}

View file

@ -0,0 +1,78 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class TravelInsurance
*
* @property int $id
* @property int $booking_id
* @property string $policy_number
* @property string $ak
* @property string $an
* @property string $akt
* @property float $premium
* @property string $request_data
* @property Carbon $created_at
* @property Carbon $updated_at
* @property Booking $booking
* @package App\Models
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereAk($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereAkt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereAn($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereBookingId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance wherePolicyNumber($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance wherePremium($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereRequestData($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereUpdatedAt($value)
* @mixin \Eloquent
*/
class TravelArrivalPoint extends Model
{
protected $connection = 'mysql_stern';
protected $table = 'travel_arrival_point';
public $timestamps = false;
protected $casts = [
'travel_country_id' => 'int',
];
protected $fillable = [
'name',
'travel_country_id',
'active'
];
public function travel_programs()
{
return $this->hasMany(TravelProgram::class, 'travel_arrival_point_id');
}
//on crm
/* public function travel_country_crm()
{
return $this->belongsTo('App\Models\Sym\TravelCountry', 'travel_country_id', 'crm_id');
}
*/
//on stern DB relaunch
public function travel_country()
{
return $this->belongsTo('App\Models\TravelCountry', 'travel_country_id', 'id');
}
}

View file

@ -34,7 +34,8 @@ class TravelCategory extends Model
public $timestamps = false;
protected $fillable = [
'name'
'name',
'active'
];
public function bookings()
@ -46,4 +47,9 @@ class TravelCategory extends Model
{
return $this->hasMany(Lead::class, 'travelcategory_id');
}
public function travel_programs()
{
return $this->hasMany(TravelProgram::class, 'travel_category');
}
}

View file

@ -0,0 +1,60 @@
<?php
/**
* Created by Reliese Model.
*/
namespace App\Models;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Model;
/**
* Class TravelInsurance
*
* @property int $id
* @property int $booking_id
* @property string $policy_number
* @property string $ak
* @property string $an
* @property string $akt
* @property float $premium
* @property string $request_data
* @property Carbon $created_at
* @property Carbon $updated_at
* @property Booking $booking
* @package App\Models
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereAk($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereAkt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereAn($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereBookingId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance wherePolicyNumber($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance wherePremium($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereRequestData($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Models\TravelInsurance whereUpdatedAt($value)
* @mixin \Eloquent
*/
class TravelGerneralNote extends Model
{
protected $connection = 'mysql_stern';
protected $table = 'travel_general_notes';
public $timestamps = false;
protected $fillable = [
'name',
'text',
// 'active'
];
public function travel_programs()
{
return $this->hasMany(TravelProgram::class, 'generalnote');
}
}

View file

@ -163,6 +163,12 @@ class TravelProgram extends Model
1 => 'Vermittlung'
];
public static $programDiscountTypes = [
0 => '€',
1 => '%'
];
public static $travelCategoryTypes = [
1 => 'Ägypten-Reise',
2 => 'Israel-Reise',
@ -172,9 +178,9 @@ class TravelProgram extends Model
public function travel_arrival_point()
{
return $this->belongsTo(TravelArrivalPoint::class);
return $this->belongsTo(TravelArrivalPoint::class, 'travel_arrival_point_id');
}
//default 1 sterntours
public function travel_organizer()
{
return $this->belongsTo(TravelOrganizer::class, 'organizer');

View file

@ -690,7 +690,7 @@ class TravelUserBookingFewo extends Model
$salutation = __('Dear Sir')." ".$this->travel_user->last_name;
}
if($this->travel_user->salutation_id == 2){
$salutation = __('Dear Sir')." ".$this->travel_user->last_name;
$salutation = __('Dear Mrs')." ".$this->travel_user->last_name;
}
if($this->travel_user->salutation_id == 4){
$salutation = __('Dear customer')." ".$this->travel_user->last_name;

View file

@ -18,7 +18,7 @@ class TravelProgramRepository extends BaseRepository {
public function update($data)
{
if($data['id'] == "new"){
/*if($data['id'] == "new"){
$this->model = TravelProgram::createNew();
}
else{
@ -29,9 +29,88 @@ class TravelProgramRepository extends BaseRepository {
$this->model->fill($data);
$this->model->status = isset($data['status']) ? true : false;
$this->model->save();
return $this->model;*/
}
public function updateGeneral($id, $data){
//weekdays
$this->model = TravelProgram::findOrFail($id);
$this->checkDraftsWeekdays($data['weekdays']);
$data['weekdays'] = $this->model->setWeekdaysFromArray($data['weekdays']);
$fill = [
'title' => $data['title'],
'subtitle' => $data['subtitle'],
'program_code' => $data['program_code'],
'program_type' => $data['program_type'] ? $data['program_type'] : null,
'category_id' => $data['category_id'] ? $data['category_id'] : null,
'travel_country' => $data['travel_country'] ? $data['travel_country'] : null,
'travel_agenda' => $data['travel_agenda'] ? $data['travel_agenda'] : null,
'travel_category' => $data['travel_category'] ? $data['travel_category'] : null,
'travel_company' => $data['travel_company'] ? $data['travel_company'] : null,
'status' => isset($data['status']) ? 1 : 0,
'weekdays' => $data['weekdays'],
];
$this->model->fill($fill);
$this->model->save();
return $this->model;
}
public function updateDetail($id, $data){
//weekdays
$this->model = TravelProgram::findOrFail($id);
$this->checkDraftsWeekdays($data['weekdays']);
$data['weekdays'] = $this->model->setWeekdaysFromArray($data['weekdays']);
$fill = [
'default_flight_price' => $data['default_flight_price'] ? $data['default_flight_price'] : null,
'deposit_percent' => $data['deposit_percent'] ? $data['deposit_percent'] : null,
'discount' => $data['discount'] ? $data['discount'] : null,
'discount_is_percent_value' => $data['discount_is_percent_value'] ? $data['discount_is_percent_value'] : null,
'travel_arrival_point_id' => $data['travel_arrival_point_id'] ? $data['travel_arrival_point_id'] : null,
'max_age_for_children' => $data['max_age_for_children'] ? $data['max_age_for_children'] : null,
'url' => $data['url'] ? $data['url'] : null,
'generalnote' => $data['generalnote'] ? $data['generalnote'] : null,
];
$this->model->fill($fill);
$this->model->save();
return $this->model;
}
/*
'profit_margin',
'program_duration',
'is_seasonal',
'youth',
'slider_info',
'organizer',
'generalnote',
'included',
'class_description',
'excluded',
'advices',
'notes',
'html_description',
'insurance_1',
'insurance_2',
'insurance_3',
'insurance_4',
'in_slider',
'show_map',
'map_html',
'map_image',
'map_image_ext',
'netto_prices_in_euro',
'text_right',
'position',
*/
public function checkDraftsWeekdays($weekdays){
if(isset($weekdays) && is_array($weekdays) && $weekdays[0] === NULL){
$weekdays = range(0, 6);

View file

@ -412,7 +412,7 @@ class HTMLHelper
public static function getWeekdaysString($weekdays = []){
$ret = "";
if(count($weekdays)){
if(is_array($weekdays) && count($weekdays)){
foreach($weekdays as $weekday){
if($weekday !== NULL){
$ret .= self::getDay($weekday).', ';

View file

@ -14,6 +14,8 @@ use App\Models\TravelCategory;
use App\Models\ServiceProvider;
use App\Models\TravelNationality;
use App\Models\Sym\TravelCountry as SymTravelCountry;
use App\Models\TravelArrivalPoint;
use App\Models\TravelGerneralNote;
class Model
{
@ -25,18 +27,16 @@ class Model
public static function getTravelCountryArray($emtpy = false){
$TravelCountry = TravelCountry::where('active_backend', 1)->orderBy('name')->get()->pluck('name', 'id');
return $emtpy ? $TravelCountry->prepend('-', 0) : $TravelCountry;
}
}
public static function getTravelCountryCRMArray($emtpy = false){
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');
$TravelCategory = TravelCategory::where('active', true)->orderBy('name')->get()->pluck('name', 'id');
return $emtpy ? $TravelCategory->prepend('-', 0) : $TravelCategory;
}
public static function getTravelAgendaArray($emtpy = false, $travelcountry_id = false){
@ -63,6 +63,17 @@ class Model
return $emtpy ? $TravelCompany->prepend('-', 0) : $TravelCompany;
}
public static function getTravelArrivalPointArray($emtpy = false){
$TravelArrivalPoint = TravelArrivalPoint::where('active', true)->orderBy('name')->get()->pluck('name', 'id');
return $emtpy ? $TravelArrivalPoint->prepend('-', 0) : $TravelArrivalPoint;
}
public static function getTravelGerneralNotesArray($emtpy = false){
$TravelGerneralNote = TravelGerneralNote::orderBy('name')->get()->pluck('name', 'id');
return $emtpy ? $TravelGerneralNote->prepend('-', 0) : $TravelGerneralNote;
}
public static function getBranchArray($emtpy = false){
$Branch = Branch::orderBy('name')->get()->pluck('name', 'id');
return $emtpy ? $Branch->prepend('-', 0) : $Branch;

View file

@ -54,12 +54,16 @@ return [
'sua-st-tpl' => ['name' => 'SUPERADMIN > Einstellungen > Reiseorte' , 'color' => 'superadmin'],
'sua-st-bs' => ['name' => 'SUPERADMIN > Einstellungen > Reisestatus' , 'color' => 'superadmin'],
'sua-st-tc' => ['name' => 'SUPERADMIN > Einstellungen > Veranstalter' , 'color' => 'superadmin'],
'sua-st-tca' => ['name' => 'SUPERADMIN > Einstellungen > Reiseart' , 'color' => 'superadmin'],
'sua-st-tap' => ['name' => 'SUPERADMIN > Einstellungen > Zielflughafen' , 'color' => 'superadmin'],
'sua-st-in' => ['name' => 'SUPERADMIN > Einstellungen > Versicherungen' , 'color' => 'superadmin'],
'sua-st-ca' => ['name' => 'SUPERADMIN > Einstellungen > Kategorien' , 'color' => 'superadmin'],
'sua-st-tgn' => ['name' => 'SUPERADMIN > Einstellungen > Reisehinweise' , 'color' => 'superadmin'],
'sua-re' => ['name' => 'SUPERADMIN > Export' , 'color' => 'superadmin'],
'sua-re-bo' => ['name' => 'SUPERADMIN > Export > Buchungen' , 'color' => 'superadmin'],
'sua-re-pp' => ['name' => 'SUPERADMIN > Export > Leistungsträger' , 'color' => 'superadmin'],
'sua-ur-rt' => ['name' => 'SUPERADMIN > User Rechte' , 'color' => 'danger'],
'cms-cn-co' => ['name' => 'ADMIN CMS > Inhalte > Länder' , 'color' => 'secondary'],
],
],

View file

@ -0,0 +1,47 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
/**
* Migration auto-generated by Sequel Pro Laravel Export (1.4.1)
* @see https://github.com/cviebrock/sequel-pro-laravel-export
*/
class CreateBookingVoucherTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('booking_voucher_agency', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('booking_id');
$table->binary('binary_data');
$table->dateTime('created_at');
$table->dateTime('updated_at');
$table->index('booking_id', 'booking_voucher_agency_booking_id_idx');
$table->foreign('booking_id', 'booking_voucher_agency_booking_id_booking_id')->references('id')->on('booking')->onDelete('CASCADE
')->onUpdate('RESTRICT');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('booking_voucher_agency');
}
}

View file

@ -0,0 +1,47 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
/**
* Migration auto-generated by Sequel Pro Laravel Export (1.4.1)
* @see https://github.com/cviebrock/sequel-pro-laravel-export
*/
class CreateBookingVoucherTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('booking_voucher', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('booking_id');
$table->binary('binary_data');
$table->dateTime('created_at');
$table->dateTime('updated_at');
$table->index('booking_id', 'booking_voucher_booking_id_idx');
$table->foreign('booking_id', 'booking_voucher_booking_id_booking_id')->references('id')->on('booking')->onDelete('CASCADE
')->onUpdate('RESTRICT');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('booking_voucher');
}
}

View file

@ -124,15 +124,15 @@
<th scope="row">{{$booking_files_count++}}</th>
<td>
<a href="{{ route('customer_file_show', ['booking_voucher', $booking_voucher->id]) }}" target="_blank" class="badge badge-md badge-dark">
<i class="fa fa-file-pdf mr-1"></i> Voucher-ID {{$booking_voucher->id}}
<i class="fa fa-file-pdf mr-1"></i> Voucher ID {{$booking_voucher->id}}
</a>
</td>
<td>
&nbsp;
Voucher für den Kunden
</td>
<td>{{\App\Services\Util::_format_date($booking_voucher->updated_at, 'date')}}</td>
<td>
<a href="{{ route('customer_file_show', ['booking_vouchers', $booking_voucher->id, true]) }}" class="btn btn-xs btn-default"
<a href="{{ route('customer_file_show', ['booking_voucher', $booking_voucher->id, true]) }}" class="btn btn-xs btn-default"
title="Download" data-placement="left" rel="tooltip">
<i class="fa fa-download"></i>
</a>
@ -141,6 +141,29 @@
@endforeach
@endif
@if($booking->booking_voucher_agencys)
@foreach($booking->booking_voucher_agencys as $booking_voucher_agency)
<tr>
<th scope="row">{{$booking_files_count++}}</th>
<td>
<a href="{{ route('customer_file_show', ['booking_voucher_agency', $booking_voucher_agency->id]) }}" target="_blank" class="badge badge-md badge-dark">
<i class="fa fa-file-pdf mr-1"></i> Voucher-Agentur ID {{$booking_voucher_agency->id}}
</a>
</td>
<td>
Voucher für die Agentur
</td>
<td>{{\App\Services\Util::_format_date($booking_voucher_agency->updated_at, 'date')}}</td>
<td>
<a href="{{ route('customer_file_show', ['booking_voucher_agency', $booking_voucher_agency->id, true]) }}" class="btn btn-xs btn-default"
title="Download" data-placement="left" rel="tooltip">
<i class="fa fa-download"></i>
</a>
</td>
</tr>
@endforeach
@endif
@if($booking->insurance_certificates)
@foreach($booking->insurance_certificates as $insurance_certificate)
<tr>

View file

@ -114,15 +114,39 @@
<th scope="row">{{$booking_files_count++}}</th>
<td>
<a href="{{ route('customer_file_show', ['booking_voucher', $booking_voucher->id]) }}" target="_blank" class="badge badge-md badge-dark">
<i class="fa fa-file-pdf mr-1"></i> Voucher-ID {{$booking_voucher->id}}
<i class="fa fa-file-pdf mr-1"></i> Voucher ID {{$booking_voucher->id}}
</a>
</td>
<td>
&nbsp;
Voucher für den Kunden
</td>
<td>{{\App\Services\Util::_format_date($booking_voucher->updated_at, 'date')}}</td>
<td>
<button data-target="{{ route('customer_file_show', ['booking_vouchers', $booking_voucher->id]) }}" data-name="Voucher-ID_{{$booking_voucher->id}}.pdf" class="btn btn-xs btn-primary add-file-to-attachment"
<button data-target="{{ route('customer_file_show', ['booking_voucher', $booking_voucher->id]) }}" data-name="Voucher-ID_{{$booking_voucher->id}}.pdf" class="btn btn-xs btn-primary add-file-to-attachment"
title="als Anhang hinzufügen" data-placement="left" rel="tooltip">
<i class="fa fa-cloud-download-alt"></i>
</button>
</td>
</tr>
@endforeach
@endif
@if($booking->booking_voucher_agencys)
@foreach($booking->booking_voucher_agencys as $booking_voucher_agency)
<tr>
<th scope="row">{{$booking_files_count++}}</th>
<td>
<a href="{{ route('customer_file_show', ['booking_voucher_agency', $booking_voucher_agency->id]) }}" target="_blank" class="badge badge-md badge-dark">
<i class="fa fa-file-pdf mr-1"></i> Voucher-Agentur ID {{$booking_voucher_agency->id}}
</a>
</td>
<td>
Voucher für die Agentur
</td>
<td>{{\App\Services\Util::_format_date($booking_voucher_agency->updated_at, 'date')}}</td>
<td>
<button data-target="{{ route('customer_file_show', ['booking_voucher_agency', $booking_voucher->id]) }}" data-name="Voucher-Agentur-ID_{{$booking_voucher->id}}.pdf" class="btn btn-xs btn-primary add-file-to-attachment"
title="als Anhang hinzufügen" data-placement="left" rel="tooltip">
<i class="fa fa-cloud-download-alt"></i>
</button>

View file

@ -5,65 +5,8 @@
<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">
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>
</head>
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
<body class="body" style="padding:0; margin:0; display:block; width: 100%; height: 100%; background:#f8f8f8; color: #37302d; font-size: 14px; line-height: 20px -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 }}
@ -74,7 +17,7 @@
<td align="center" valign="top" bgcolor="#f8f8f8" width="100%">
<center>
<br>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="700" class="w320">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="700" class="w320">
<tr>
<td align="center" valign="top">
@include('emails.header')
@ -89,7 +32,7 @@
<tr>
<td>
<center>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d;">
<br>
@ -105,7 +48,7 @@
<tr>
<td>
<center>
<table role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
<table style="text-align: left;" role="presentation" cellpadding="0" cellspacing="0" width="100%" border="0">
<tbody>
<tr>
<td style="word-wrap:break-word;background:transparent;font-size:0px;padding:10px 25px;padding-top:15px;padding-bottom:15px;padding-right:40px;padding-left:40px;" align="center" valign="top" background="data:image/gif;base64,">

View file

@ -5,76 +5,27 @@
<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">
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>
</head>
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
<body class="body" style="padding:0; margin:0; display:block; width: 100%; height: 100%; background:#f8f8f8; color: #37302d; font-size: 14px; line-height: 20px -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;">
{{ strip_tags($content) }}
</div>
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%">
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%" style="text-align: left;">
<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">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="700" class="w320">
<tr>
<td align="center" valign="top">
@include('emails.header')
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%"
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="100%"
bgcolor="#ffffff">
<tr>
<td>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: left">
<p>

View file

@ -1,5 +1,4 @@
<table cellpadding="0" cellspacing="0" class="force-full-width"
bgcolor="#f8f8f8" style="margin: 0 auto">
<table cellpadding="0" cellspacing="0" bgcolor="#f8f8f8" style="margin: 0 auto; width: 100% !important; text-align: left;">
<tr>
<td style="color:#7B7B7E; font-size:14px;">
<br>

View file

@ -1,13 +1,13 @@
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td style=" text-align:center;">
<center>
<table width="100%" cellpadding="0" cellspacing="0" border="0" class="">
<table width="100%" cellpadding="0" cellspacing="0" border="0">
<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">
<img src="https://mein.sterntours.de/images/stern-tours-logo.png" alt="STERN TOURS" style="border:none;" width="260">
</picture>
</td>
</tr>

View file

@ -5,80 +5,19 @@
<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">
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>
</head>
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
<body class="body" style="padding:0; margin:0; display:block; width: 100%; height: 100%; background:#f8f8f8; color: #37302d; font-size: 14px; line-height: 20px -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%">
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%" style="text-align: left;">
<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">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="700" class="w320">
<tr>
<td align="center" valign="top">
@include('emails.header')
@ -86,7 +25,7 @@
bgcolor="#ffffff">
<tr>
<td>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: left">
<p style="font-size: 14px;">{!! nl2br($copy1line) !!}</p>

View file

@ -5,55 +5,6 @@
<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">
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>
</head>
<body class="body" style="padding:0; margin:0; display:block; background:#f8f8f8; -webkit-text-size-adjust:none" bgcolor="#f8f8f8">
@ -61,7 +12,7 @@
{{ $copy1line }}
</div>
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%">
<table align="center" cellpadding="0" cellspacing="0" width="100%" height="100%" style="text-align: left;">
<tr>
<td align="center" valign="top" bgcolor="#f8f8f8" width="100%">
<center>
@ -70,15 +21,14 @@
<tr>
<td align="center" valign="top">
@include('emails.header')
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="100%"
bgcolor="#ffffff">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="100%" bgcolor="#ffffff" >
<tr>
<td>
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: left">
<br>
<b><span class="headline"> {{ $salutation }} </span></b>
<b><span style="color: #5f8155; font-size: 16px;"> {{ $salutation }} </span></b>
<br>
<p style="font-size: 14px;">{{ $copy1line }}</p>
</td>
@ -88,7 +38,7 @@
</tr>
<tr>
<td>
<table style="padding: 20px; border:1px solid #eee; background-color: #f6fdf5" cellpadding="3" cellspacing="0" width="90%">
<table style="padding: 20px; border:1px solid #eee; background-color: #f6fdf5; text-align: left;" cellpadding="3" cellspacing="0" width="90%">
<tr>
<td style="color:#37302d; text-align: right; vertical-align: top; width: 25%; " >
{{ __('Belegungszeitraum:') }}
@ -142,7 +92,7 @@
</tr>
<tr>
<td style="color:#37302d;font-size: 14px;">
<table style="margin: 0 auto;" cellpadding="0" cellspacing="0" width="90%">
<table style="margin: 0 auto; text-align: left;" cellpadding="0" cellspacing="0" width="90%">
@if($notice && $notice != "")
<tr>
<td style="color:#37302d;">

View file

@ -346,11 +346,27 @@
<a href="{{ route('admin_settings_travel_company') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-archive"></i><div>{{ __('Veranstalter') }}</div></a>
</li>
@endif
@if(Auth::user()->isPermission('sua-st-tca'))
<li class="sidenav-item{{ Request::is('admin/settings/travel_category') ? ' active' : '' }}">
<a href="{{ route('admin_settings_travel_category') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-briefcase"></i><div>{{ __('Reiseart') }}</div></a>
</li>
@endif
@if(Auth::user()->isPermission('sua-st-tap'))
<li class="sidenav-item{{ Request::is('admin/settings/travel_arrival_point') ? ' active' : '' }}">
<a href="{{ route('admin_settings_travel_arrival_point') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-pin"></i><div>{{ __('Zielflughafen') }}</div></a>
</li>
@endif
@if(Auth::user()->isPermission('sua-st-in'))
<li class="sidenav-item{{ Request::is('admin/settings/insurance') ? ' active' : '' }}">
<a href="{{ route('admin_settings_insurance') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-umbrella"></i><div>{{ __('Versicherungen') }}</div></a>
</li>
@endif
@if(Auth::user()->isPermission('sua-st-tgn'))
<li class="sidenav-item{{ Request::is('admin/settings/gerneral_notes') ? ' active' : '' }}">
<a href="{{ route('admin_settings_gerneral_notes') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-paper"></i><div>{{ __('Reisehinweise') }}</div></a>
</li>
@endif
@if(Auth::user()->isPermission('sua-st-ca'))
<li class="sidenav-item{{ Request::is('admin/settings/categories') ? ' active' : '' }}">
<a href="{{ route('admin_settings_categories') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-list-box"></i><div>{{ __('Kategorien') }}</div></a>

View file

@ -0,0 +1,106 @@
@extends('layouts.layout-2')
@section('content')
<h4 class="font-weight-bold py-3 mb-1">
Reisehinweise
</h4>
<div class="card">
<div class="card-datatable table-responsive">
<table class="datatables-default table table-striped table-bordered">
<thead>
<tr>
<th style="max-width: 60px;">&nbsp;</th>
<th>{{__('Name')}}</th>
<th>{{__('Text')}}</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($gerneral_notes as $value)
<tr>
<td>
<button type="button" class="btn icon-btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-default"
data-id="{{ $value->id }}"
data-name="{{ $value->name }}"
data-text="{{ $value->text }}">
<span class="fa fa-edit"></span>
</button>
</td>
<td data-sort="{{ $value->id }}">{{ $value->name }}</td>
<td data-sort="{{ $value->id }}">{{ $value->text }}</td>
<td><a class="text-danger" href="{{ route('admin_settings_gerneral_notes_delete', [$value->id]) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a></td>
</tr>
@endforeach
</tbody>
</table>
<div class="mt-4 col">
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-default"
data-id="new"
data-name=""
data-text=""
>Neues Reiseprogramm anlegen</button>
</div>
</div>
</div>
<!-- Modal template -->
<div class="modal fade" id="modals-default">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('admin_settings_gerneral_notes_update') }}" method="post">
@csrf
<input type="hidden" class="form-control" name="id">
<div class="modal-header">
<h5 class="modal-title">Reiseprogramme <span class="font-weight-light">anlegen/bearbeiten</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-row">
<div class="form-group col">
<label for="name" class="form-label">Name*</label>
<input type="text" class="form-control" name="name" placeholder="{{__('Description')}}" required>
</div>
</div>
<div class="form-row">
<div class="form-group col">
<label class="form-label" for="text">Text</label>
<textarea class="form-control" rows="10" name="text" cols=""></textarea>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
</div>
</form>
</div>
</div>
<script>
$( document ).ready(function() {
$('#modals-default').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
$(this).find(".modal-content input[name='id']").val(button.data('id'));
$(this).find(".modal-body input[name='name']").val(button.data('name'));
$(this).find(".modal-body textarea[name='text']").val(button.data('text'));
});
$('.datatables-default').dataTable({
"bLengthChange": false,
"iDisplayLength": 50,
"order": [[ 1, "asc" ]],
"language": {
"url": "/js/German.json"
}
});
});
</script>
@endsection

View file

@ -0,0 +1,117 @@
@extends('layouts.layout-2')
@section('content')
<h4 class="font-weight-bold py-3 mb-1">
Zielflughafen
</h4>
<div class="card">
<div class="card-datatable table-responsive">
<table class="datatables-default table table-striped table-bordered">
<thead>
<tr>
<th style="max-width: 60px;">&nbsp;</th>
<th>{{__('Name')}}</th>
<th>{{__('Land')}}</th>
<th>{{__('sichtbar')}}</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($travel_arrival_point as $value)
<tr>
<td>
<button type="button" class="btn icon-btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-default"
data-id="{{ $value->id }}"
data-name="{{ $value->name }}"
data-active="{{ $value->active }}"
data-travel_country_id="{{$value->travel_country_id}}">
<span class="fa fa-edit"></span>
</button>
</td>
<td data-sort="{{ $value->id }}">{{ $value->name }}</td>
<td>{{ $value->travel_country->name }}</td>
<td data-sort="{{ $value->active }}">{!! \App\Services\HTMLHelper::getActiveIcon($value->active) !!}</td>
<td><a class="text-danger" href="{{ route('admin_settings_travel_arrival_point_delete', [$value->id]) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a></td>
</tr>
@endforeach
</tbody>
</table>
<div class="mt-4 col">
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-default"
data-id="new"
data-name=""
data-active="1"
data-travel_country_id="0"
>Neues Reiseprogramm anlegen</button>
</div>
</div>
</div>
<!-- Modal template -->
<div class="modal fade" id="modals-default">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('admin_settings_travel_arrival_point_update') }}" method="post">
@csrf
<input type="hidden" class="form-control" name="id">
<div class="modal-header">
<h5 class="modal-title">Reiseprogramme <span class="font-weight-light">anlegen/bearbeiten</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-row">
<div class="form-group col">
<label for="name" class="form-label">Name*</label>
<input type="text" class="form-control" name="name" placeholder="{{__('Description')}}" required>
</div>
</div>
<div class="form-group">
<label class="custom-control custom-checkbox m-0">
<input type="checkbox" class="custom-control-input" name="active" checked>
<span class="custom-control-label">{{__('sichtbar')}}</span>
</label>
</div>
<div class="form-group">
<label for="travel_country_id" class="form-label">{{__('Land')}}</label>
<select class="selectpicker" data-style="btn-default" name="travel_country_id" data-live-search="true" required>
{!! HTMLHelper::getTravelCountriesOptions(false, false) !!}
</select>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
</div>
</form>
</div>
</div>
<script>
$( document ).ready(function() {
$('#modals-default').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
$(this).find(".modal-content input[name='id']").val(button.data('id'));
$(this).find(".modal-body input[name='name']").val(button.data('name'));
$(this).find(".modal-body input[name='active']").prop( "checked", button.data('active'));
$(this).find(".modal-body select[name='travel_country_id']").val(button.data('travel_country_id'));
$('.selectpicker').selectpicker('refresh');
});
$('.datatables-default').dataTable({
"bLengthChange": false,
"iDisplayLength": 50,
"order": [[ 1, "asc" ]],
"language": {
"url": "/js/German.json"
}
});
});
</script>
@endsection

View file

@ -0,0 +1,107 @@
@extends('layouts.layout-2')
@section('content')
<h4 class="font-weight-bold py-3 mb-1">
Reiseart
</h4>
<div class="card">
<div class="card-datatable table-responsive">
<table class="datatables-default table table-striped table-bordered">
<thead>
<tr>
<th style="max-width: 60px;">&nbsp;</th>
<th>{{__('Name')}}</th>
<th>{{__('sichtbar')}}</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($travel_category as $value)
<tr>
<td>
<button type="button" class="btn icon-btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-default"
data-id="{{ $value->id }}"
data-name="{{ $value->name }}"
data-active="{{ $value->active }}">
<span class="fa fa-edit"></span>
</button>
</td>
<td data-sort="{{ $value->id }}">{{ $value->name }}</td>
<td data-sort="{{ $value->active }}">{!! \App\Services\HTMLHelper::getActiveIcon($value->active) !!}</td>
<td><a class="text-danger" href="{{ route('admin_settings_travel_category_delete', [$value->id]) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a></td>
</tr>
@endforeach
</tbody>
</table>
<div class="mt-4 col">
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-default"
data-id="new"
data-name=""
data-active="1">Neue Reiseart anlegen</button>
</div>
</div>
</div>
<!-- Modal template -->
<div class="modal fade" id="modals-default">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('admin_settings_travel_category_update') }}" method="post">
@csrf
<input type="hidden" class="form-control" name="id">
<div class="modal-header">
<h5 class="modal-title">Reiseart <span class="font-weight-light">anlegen/bearbeiten</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-row">
<div class="form-group col">
<label for="name" class="form-label">Name*</label>
<input type="text" class="form-control" name="name" placeholder="{{__('Description')}}" required>
</div>
</div>
<div class="form-group">
<label class="custom-control custom-checkbox m-0">
<input type="checkbox" class="custom-control-input" name="active" checked>
<span class="custom-control-label">{{__('sichtbar')}}</span>
</label>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
</div>
</form>
</div>
</div>
<script>
$( document ).ready(function() {
$('#modals-default').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
$(this).find(".modal-content input[name='id']").val(button.data('id'));
$(this).find(".modal-body input[name='name']").val(button.data('name'));
$(this).find(".modal-body input[name='active']").prop( "checked", button.data('active'));
//$('.selectpicker').selectpicker('refresh');
});
$('.datatables-default').dataTable({
"bLengthChange": false,
"iDisplayLength": 50,
"order": [[ 1, "asc" ]],
"language": {
"url": "/js/German.json"
}
});
});
</script>
@endsection

View file

@ -0,0 +1,52 @@
<div class="card mb-2 border-primary">
<h6 class="card-header bg-primary text-white py-2" data-toggle="collapse" data-target="#collapseTravelProgramClasses" aria-expanded="false" aria-controls="collapseTravelProgramClasses">
<strong style="line-height: 1.6em">Kategorien/Klassen</strong>
</h6>
<div class="collapse" id="collapseTravelProgramClasses">
<div class="card-body">
<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Standard</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($program->classes as $value)
<tr>
<td>
<button type="button" class="btn icon-btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-classes"
data-id="{{ $value->id }}"
data-name="{{ $value->name }}"
data-description="{{ $value->description }}"
data-standard="{{ $value->standard }}">
<span class="fa fa-edit"></span>
</button>
</td>
<td>{{ $value->name }}</td>
<td>@if($value->standard)
<span class="badge badge-pill badge-success"><i class="fa fa-check"></i></span>
@else
<span class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>
@endif
</td>
<td><a class="text-danger" href="{{ route('travel_program_class_delete', [$value->id]) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a></td>
</tr>
@endforeach
</tbody>
</table>
<div class="text-right">
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-classes"
data-id="new"
data-name=""
data-description=""
data-active="1"
>Neue Katagorie anlegen</button>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,104 @@
<div class="card mb-2 border-primary">
<h6 class="card-header bg-primary text-white py-2" data-toggle="collapse" data-target="#collapseTravelProgramDetails" aria-expanded="false" aria-controls="collapseTravelProgramDetails">
<strong style="line-height: 1.6em">Details</strong>
</h6>
<div class="collapse" id="collapseTravelProgramDetails">
<div class="card-body">
<div class="form-row">
<div class="form-group col-sm-6 col-md-4">
<label for="default_flight_price" class="form-label">{{ __('Standard-Flugpreis') }}</label>
{{ Form::text('default_flight_price', $program->default_flight_price, array('class'=>'form-control', 'id'=>'default_flight_price')) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="deposit_percent" class="form-label">{{ __(' Anzahlung in %') }}
<button class="btn btn-xs btn-default" title=" wenn leer, default Wert 20%<br>0 = keine Anzahlung<br>Ägypten 20% vom Gesamtpreis<br>Rest 100% vom Flugpreis und 20% Landleistung" data-placement="top" rel="tooltip">
<i class="fa fa-info"></i></button></label>
{{ Form::text('deposit_percent', $program->deposit_percent, array('class'=>'form-control', 'id'=>'deposit_percent')) }}
</div>
<div class="form-group col-6 col-sm-3 col-md-2">
<label for="discount" class="form-label">{{ __('Rabatt') }}*</label>
{{ Form::text('discount', $program->discount, array('class'=>'form-control', 'id'=>'discount')) }}
</div>
<div class="form-group col-6 col-sm-3 col-md-2">
<label for="discount_is_percent_value" class="form-label">{{ __('Rabatt in') }}*</label>
{{ Form::select('discount_is_percent_value', $program::$programDiscountTypes , $program->discount_is_percent_value, array('class'=>'custom-select', 'id'=>'discount_is_percent_value')) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="travel_arrival_point_id" class="form-label">{{ __('Zielflughafen') }}* <a href="{{ route('admin_settings_travel_arrival_point') }}"><i class="fa fa-edit"></i></a></label>
{{ Form::select('travel_arrival_point_id', \App\Services\Model::getTravelArrivalPointArray(true) , $program->travel_arrival_point_id, array('class'=>'custom-select', 'id'=>'travel_arrival_point_id')) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="max_age_for_children" class="form-label">{{ __('max. Alter für Kinderermäßigung (0 = keine)') }}</label>
{{ Form::text('max_age_for_children', $program->max_age_for_children, array('class'=>'form-control', 'id'=>'max_age_for_children')) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="url" class="form-label">{{ __('URL') }}</label>
{{ Form::text('url', $program->url, array('class'=>'form-control', 'id'=>'url')) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="generalnote" class="form-label">{{ __('Reisehinweise') }}* <a href="{{ route('admin_settings_gerneral_notes') }}"><i class="fa fa-edit"></i></a></label>
{{ Form::select('generalnote', \App\Services\Model::getTravelGerneralNotesArray(true) , $program->generalnote, array('class'=>'custom-select', 'id'=>'generalnote')) }}
</div>
<div class="col-sm-12">
<div class="text-left mt-2">
<button type="submit" name="action" value="saveDetails" class="btn btn-sm btn-secondary">Änderungen speichern</button>&nbsp;
<a href="{{route('travel_programs')}}" class="btn btn-sm btn-default">{{ __('zur Übersicht') }}</a>
</div>
</div>
</div>
</div>
</div>
</div>
{{--
Text
Eingeschlossene Leistungen (pro Zeile eine Leistung!)
included
Klassen/Kategorien und zusätzliche Infos (erscheint unterhalb der "Eingeschlossenen Leistungen") (HTML)
class_description
Nicht eingeschlossene Leistungen (pro Zeile eine Leistung!)
excluded
Hinweise
advices
Anmerkungen (pro Zeile eine Anmerkung!)
notes
HTML-Beschreibung
html_description
Text (rechts außen)
text_right
Reiseversicherung 1
Reiseversicherung 2
Reiseversicherung 3
Reiseversicherung 4
Im Slider anzeigen?
Kartentyp
Währung der Netto-Preise
Position bei Suchergebnissen (Kleinere Wert bedeutet höhere Position)
--}}

View file

@ -0,0 +1,55 @@
<div class="card mb-2 border-primary">
<h6 class="card-header bg-primary text-white py-2" data-toggle="collapse" data-target="#collapseTravelProgramDrafts" aria-expanded="false" aria-controls="collapseTravelProgramDrafts">
<strong style="line-height: 1.6em">Vorlagen Reiseprogramm (CRM)</strong>
</h6>
<div class="collapse" id="collapseTravelProgramDrafts">
<div class="card-body">
<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Kategorie</th>
<th>Wochentage</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($program->travel_program_drafts as $value)
<tr>
<td>
<button type="button" class="btn icon-btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-draft"
data-id="{{ $value->id }}"
data-travel_class_id="{{ $value->travel_class_id }}"
data-draft_id="{{ $value->draft_id }}"
data-weekdays="{{ json_encode($value->weekdays) }}">
<span class="fa fa-edit"></span>
</button>
</td>
<td>{{ $value->draft->name }}</td>
<td>@if( $value->travel_class)
{{ $value->travel_class->name }}
@else
alle Kategorien
@endif
</td>
<td>
{!! HTMLHelper::getWeekdaysString($value->weekdays) !!}
</td>
<td><a class="text-danger" href="{{ route('travel_program_draft_delete', [$value->id]) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a></td>
</tr>
@endforeach
</tbody>
</table>
<div class="text-right">
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-draft"
data-id="new"
data-travel_class_id=""
data-draft_id=""
data-weekdays=""
>Neue Vorlage zuordnen</button>
</div>
</div>
</div>
</div>

View file

@ -0,0 +1,80 @@
<div class="card mb-2 border-primary">
<h6 class="card-header bg-primary text-white py-2" data-toggle="collapse" data-target="#collapseTravelProgramGeneral" aria-expanded="false" aria-controls="collapseTravelProgramGeneral">
<strong style="line-height: 1.6em">Allgemein</strong>
</h6>
<div class="collapse" id="collapseTravelProgramGeneral">
<div class="card-body">
<div class="form-group">
<label class="custom-control custom-checkbox float-right">
{!! Form::checkbox('status', 1, $program->status, ['class'=>'custom-control-input']) !!}
<span class="custom-control-label">{{__('aktiv')}}</span>
</label>
<label class="form-label" for="title">{{ __('Title') }}*</label>
{{ Form::text('title', $program->title, array('placeholder'=>__('Title'), 'class'=>'form-control', 'id'=>'title', 'required'=>true)) }}
</div>
<div class="form-row">
<div class="form-group col">
<label class="form-label" for="subtitle">{{ __('Subtitle') }}*</label>
{{ Form::text('subtitle', $program->subtitle, array('placeholder'=>__('Subtitle'), 'class'=>'form-control', 'id'=>'subtitle', 'required'=>true)) }}
</div>
</div>
<div class="form-row">
<div class="form-group col-sm-6 col-md-4">
<label for="program_code" class="form-label">{{ __('Programm Code') }}*</label>
{{ Form::text('program_code', $program->program_code, array('class'=>'form-control', 'id'=>'program_code', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="program_type" class="form-label">{{ __('Programtyp') }}*</label>
{{ Form::select('program_type', $program::$programTypeTypes , $program->program_type, array('class'=>'custom-select', 'id'=>'program_type', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="category_id" class="form-label">{{ __('Kategorie') }}*</label>
{{ Form::select('category_id', $program::$travelCategoryTypes , $program->category_id, array('class'=>'custom-select', 'id'=>'category_id', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="travel_country" class="form-label">{{ __('Reiseland') }}* <a href="{{ route('admin_settings_travel_country') }}"><i class="fa fa-edit"></i></a></label>
{{ Form::select('travel_country', \App\Services\Model::getSymTravelCountryArray() , $program->travel_country, array('class'=>'custom-select', 'id'=>'travel_country', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="travel_agenda" class="form-label">{{ __('Reiseprogramm') }}* <a href="{{ route('admin_settings_travel_program') }}"><i class="fa fa-edit"></i></a></label>
{{ Form::select('travel_agenda', \App\Services\Model::getTravelAgendaArray(true) , $program->travel_agenda, array('class'=>'custom-select', 'id'=>'travel_agenda', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="travel_category" class="form-label">{{ __('Reiseart') }}* <a href="{{ route('admin_settings_categories') }}"><i class="fa fa-edit"></i></a></label>
{{ Form::select('travel_category', \App\Services\Model::getTravelCategoryArray() , $program->travel_category, array('class'=>'custom-select', 'id'=>'travel_category', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-8">
<label for="weekdays" class="form-label">{{__('Wochentage')}}*</label>
<select class="selectpicker" data-style="btn-default" name="weekdays[]" multiple required>
{!! HTMLHelper::getWeekdaysOptions(false, $program->getWeekdaysArray()) !!}
</select>
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="travel_company" class="form-label">{{ __('Veranstalter') }}* <a href="{{ route('admin_settings_travel_company') }}"><i class="fa fa-edit"></i></a></label>
{{ Form::select('travel_company', \App\Services\Model::getTravelCompanyArray() , $program->travel_company, array('class'=>'custom-select', 'id'=>'travel_company', 'required'=>true)) }}
</div>
<div class="col-sm-12">
<div class="text-left mt-2">
<button type="submit" name="action" value="saveGeneral" class="btn btn-sm btn-secondary">Änderungen speichern</button>&nbsp;
<a href="{{route('travel_programs')}}" class="btn btn-sm btn-default">{{ __('zur Übersicht') }}</a>
</div>
</div>
</div>
{{--
<div class="form-row">
<div class="form-group col">
<a href="{{route('travel_program_generate_keywords', [$program->id])}}" class="btn btn-xs btn-secondary float-right">generate Keywords</a>
<label for="keywords" class="form-label">{{__('Keywords')}}</label>
{{ Form::text('keywords', $program->keywords, array('placeholder'=>__('Keyword,Keyword'), 'class'=>'form-control', 'id'=>'keywords')) }}
</div>
</div>
--}}
</div>
</div>
</div>

View file

@ -0,0 +1,105 @@
<div class="modal fade" id="modals-classes">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('travel_program_class_update') }}" method="post">
@csrf
<input type="hidden" class="form-control" name="id">
<input type="hidden" class="form-control" name="program_id" value="{{$program->id}}">
<div class="modal-header">
<h5 class="modal-title">Programm Katagorie/Klassen <span class="font-weight-light">anlegen/bearbeiten</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-row">
<div class="form-group col">
<label class="custom-control custom-checkbox float-right">
<input type="checkbox" class="custom-control-input" name="standard" checked>
<span class="custom-control-label">{{__('Standard')}}</span>
</label>
<label for="name" class="form-label">Name*</label>
<input type="text" class="form-control" name="name" placeholder="{{__('Description')}}" required>
</div>
</div>
<div class="form-row">
<div class="form-group col">
<label for="description" class="form-label">Beschreibung</label>
<input type="text" class="form-control" name="description" placeholder="{{__('Description')}}">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
</div>
</form>
</div>
</div>
<div class="modal fade" id="modals-draft">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('travel_program_draft_update') }}" method="post">
@csrf
<input type="hidden" class="form-control" name="id">
<input type="hidden" class="form-control" name="travel_program_id" value="{{$program->id}}">
<div class="modal-header">
<h5 class="modal-title">Vorlage Reiseprogramm <span class="font-weight-light">zuordnen</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-row">
<div class="form-group col">
<label for="draft_id" class="form-label">{{__('Vorlage')}}</label>
<select class="selectpicker" data-style="btn-default" name="draft_id" data-live-search="true" required>
{!! HTMLHelper::getDraftOptions() !!}
</select>
</div>
</div>
<div class="form-row">
<div class="form-group col">
<label for="travel_class_id" class="form-label">{{__('Kategorie')}}</label>
<select class="selectpicker" data-style="btn-default" name="travel_class_id">
{!! HTMLHelper::getTravelClassOptions($program->id) !!}
</select>
</div>
</div>
<div class="form-row">
<div class="form-group col">
<label for="weekdays" class="form-label">{{__('Wochentage')}}</label>
<select class="selectpicker" data-style="btn-default" name="weekdays[]" multiple>
{!! HTMLHelper::getWeekdaysOptions($program->id) !!}
</select>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
</div>
</form>
</div>
</div>
<script>
$( document ).ready(function() {
$('#modals-classes').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
$(this).find(".modal-content input[name='id']").val(button.data('id'));
$(this).find(".modal-body input[name='name']").val(button.data('name'));
$(this).find(".modal-body input[name='description']").val(button.data('description'));
$(this).find(".modal-body input[name='standard']").prop( "checked", button.data('standard'));
});
$('#modals-draft').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
$(this).find(".modal-content input[name='id']").val(button.data('id'));
$(this).find(".modal-body select[name='draft_id']").val(button.data('draft_id'));
$(this).find(".modal-body select[name='travel_class_id']").val(button.data('travel_class_id'));
$(this).find(".modal-body select[name='weekdays[]']").val(button.data('weekdays'));
$('.selectpicker').selectpicker('refresh');
});
});
</script>

View file

@ -2,317 +2,148 @@
@section('content')
<style>
body {
}
.btn-xs {
line-height: 1.3em;
}
.table tbody + tbody {
border-top: 1px solid #9c9c9c;
}
.table th, .table td {
border-top: none;
}
.table tr.border-none td, .table tr.border-none th {
border-top: none;
}
.table .thead-dark th {
color: #4E5155;
background-color: rgba(24, 28, 33, 0.1);
border-color: rgba(63, 69, 74, 0.1);
}
{!! Form::open(['url' => route('travel_program_detail', [$id]), 'class' => 'form-horizontal']) !!}
.input-group-text {
padding: 0.438rem 0.475rem;
}
</style>
<h4 class="font-weight-bold py-3 mb-1">
Programm @if($id == "new") <span class="text-primary">anlegen</span> @else {{"(ID: ".$id.")"}} verwalten @endif
Reiseprogramm @if($id == "new") <span class="text-primary">anlegen</span> @else verwalten {{"(ID: ".$id.")"}} @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>
<a href="{{route('travel_programs')}}" class="btn btn-default btn-sm">{{ __('zur Übersicht') }}</a>
</div>
</h4>
<div class="clearfix"></div>
<ul class="nav nav-sm nav-tabs nav-justified tabs-alt mb-3" id="top-nav-quick-jump">
<li class="nav-item">
<a class="nav-link" href="javascript:void(0)" data-collapse="#collapseTravelProgramGeneral">
Allgemein
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="javascript:void(0)" data-collapse="#collapseTravelProgramDetails">
Details
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="javascript:void(0)" data-collapse="#collapseTravelProgramClasses">
Klassen
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="javascript:void(0)" data-collapse="#collapseTravelProgramDrafts">
Vorlagen
</a>
</li>
</ul>
{!! Form::open(['url' => route('travel_program_detail', [$id]), 'class' => 'form-horizontal']) !!}
<input type="hidden" name="id" id="id" value="{{$id}}">
<!-- draft -->
<div class="card mb-2">
<div class="card-body">
<div class="form-group">
<label class="custom-control custom-checkbox float-right">
{!! Form::checkbox('status', 1, $program->status, ['class'=>'custom-control-input']) !!}
<span class="custom-control-label">{{__('aktiv')}}</span>
</label>
<label class="form-label" for="program_title">{{ __('Title') }}*</label>
{{ Form::text('title', $program->title, array('placeholder'=>__('Title'), 'class'=>'form-control', 'id'=>'program_title', 'required'=>true)) }}
</div>
<div class="form-row">
<div class="form-group col">
<label class="form-label" for="program_subtitle">{{ __('Subtitle') }}*</label>
{{ Form::text('subtitle', $program->subtitle, array('placeholder'=>__('Subtitle'), 'class'=>'form-control', 'id'=>'program_subtitle', 'required'=>true)) }}
</div>
</div>
@include('travel.program._general')
<div class="form-row">
<div class="form-group col-sm-6 col-md-4">
<label for="program_code" class="form-label">{{ __('Programm Code') }}*</label>
{{ Form::text('program_code', $program->program_code, array('class'=>'form-control', 'id'=>'program_code', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="program_type" class="form-label">{{ __('Programtyp') }}*</label>
{{ Form::select('program_type', $program::$programTypeTypes , $program->program_type, array('class'=>'custom-select', 'id'=>'program_type', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="category_id" class="form-label">{{ __('Kategorie') }}*</label>
{{ Form::select('category_id', $program::$travelCategoryTypes , $program->category_id, array('class'=>'custom-select', 'id'=>'category_id', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="travel_country" class="form-label">{{ __('Reiseland') }}*</label>
{{ Form::select('travel_country', \App\Services\Model::getSymTravelCountryArray() , $program->travel_country, array('class'=>'custom-select', 'id'=>'travel_country', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="travel_agenda" class="form-label">{{ __('Reiseprogramm') }}*</label>
{{ Form::select('travel_agenda', \App\Services\Model::getTravelAgendaArray(false) , $program->travel_agenda, array('class'=>'custom-select', 'id'=>'travel_agenda', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="travel_category" class="form-label">{{ __('Reiseart') }}*</label>
{{ Form::select('travel_category', \App\Services\Model::getTravelCategoryArray() , $program->travel_category, array('class'=>'custom-select', 'id'=>'travel_category', 'required'=>true)) }}
</div>
<div class="form-group col-sm-6 col-md-8">
<label for="weekdays" class="form-label">{{__('Wochentage')}}*</label>
<select class="selectpicker" data-style="btn-default" name="weekdays[]" multiple required>
{!! HTMLHelper::getWeekdaysOptions(false, $program->getWeekdaysArray()) !!}
</select>
</div>
<div class="form-group col-sm-6 col-md-4">
<label for="travel_company" class="form-label">{{ __('Veranstalter') }}*</label>
{{ Form::select('travel_company', \App\Services\Model::getTravelCompanyArray() , $program->travel_company, array('class'=>'custom-select', 'id'=>'travel_company', 'required'=>true)) }}
</div>
</div>
@if($id !== "new" && $program)
@include('travel.program._details')
@include('travel.program._classes')
@include('travel.program._drafts')
@endif
{{--
<div class="form-row">
<div class="form-group col">
<a href="{{route('travel_program_generate_keywords', [$program->id])}}" class="btn btn-xs btn-secondary float-right">generate Keywords</a>
<label for="keywords" class="form-label">{{__('Keywords')}}</label>
{{ Form::text('keywords', $program->keywords, array('placeholder'=>__('Keyword,Keyword'), 'class'=>'form-control', 'id'=>'keywords')) }}
</div>
</div>
--}}
</div>
<div class="float-right mt-3">
<a href="{{route('travel_programs')}}" class="btn btn-sm btn-default">{{ __('zur Übersicht') }}</a>
<a href="{{ make_v2_url("/acp/travel_program/show/".$program->id."/") }}" class="btn btn-sm btn-default float-right">{{ __('zurück ins v2 Programm') }}</a>
</div>
<!-- program classes -->
<div class="card mb-2">
<h6 class="card-header">
Eingetragene Kategorien/Klassen
</h6>
<div class="card-body">
<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Standard</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($program->classes as $value)
<tr>
<td>
<button type="button" class="btn icon-btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-class"
data-id="{{ $value->id }}"
data-name="{{ $value->name }}"
data-description="{{ $value->description }}"
data-standard="{{ $value->standard }}">
<span class="fa fa-edit"></span>
</button>
</td>
<td>{{ $value->name }}</td>
<td>@if($value->standard)
<span class="badge badge-pill badge-success"><i class="fa fa-check"></i></span>
@else
<span class="badge badge-pill badge-danger"><i class="fa fa-times"></i></span>
@endif
</td>
<td><a class="text-danger" href="{{ route('travel_program_class_delete', [$value->id]) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a></td>
</tr>
@endforeach
</tbody>
</table>
<div class="text-right">
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-class"
data-id="new"
data-name=""
data-description=""
data-active="1"
>Neue Katagorie anlegen</button>
</div>
</div>
</div>
<!-- program classes -->
<div class="card mb-2">
<h6 class="card-header">
Vorlagen Reiseprogramm (CRM)
</h6>
<div class="card-body">
<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Kategorie</th>
<th>Wochentage</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach($program->travel_program_drafts as $value)
<tr>
<td>
<button type="button" class="btn icon-btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-draft"
data-id="{{ $value->id }}"
data-travel_class_id="{{ $value->travel_class_id }}"
data-draft_id="{{ $value->draft_id }}"
data-weekdays="{{ json_encode($value->weekdays) }}">
<span class="fa fa-edit"></span>
</button>
</td>
<td>{{ $value->draft->name }}</td>
<td>@if( $value->travel_class)
{{ $value->travel_class->name }}
@else
alle Kategorien
@endif
</td>
<td>
{!! HTMLHelper::getWeekdaysString($value->weekdays) !!}
</td>
<td><a class="text-danger" href="{{ route('travel_program_draft_delete', [$value->id]) }}" onclick="return confirm('{{__('Wirklich löschen?')}}');"><i class="fa fa-trash-alt"></i></a></td>
</tr>
@endforeach
</tbody>
</table>
<div class="text-right">
<button type="button" class="btn btn-sm btn-primary" data-toggle="modal" data-target="#modals-draft"
data-id="new"
data-travel_class_id=""
data-draft_id=""
data-weekdays=""
>Neue Vorlage zuordnen</button>
</div>
</div>
</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('travel_programs')}}" class="btn btn-default">{{ __('back') }}</a>
<a href="{{ make_v2_url("/acp/travel_program/show/".$program->id."/") }}" class="btn btn-default float-right">{{ __('zurück ins v2 Programm') }}</a>
</div>
{!! Form::close() !!}
<!-- Modal template -->
<div class="modal fade" id="modals-class">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('travel_program_class_update') }}" method="post">
@csrf
<input type="hidden" class="form-control" name="id">
<input type="hidden" class="form-control" name="program_id" value="{{$program->id}}">
<div class="modal-header">
<h5 class="modal-title">Programm Katagorie/Klassen <span class="font-weight-light">anlegen/bearbeiten</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-row">
<div class="form-group col">
<label class="custom-control custom-checkbox float-right">
<input type="checkbox" class="custom-control-input" name="standard" checked>
<span class="custom-control-label">{{__('Standard')}}</span>
</label>
<label for="name" class="form-label">Name*</label>
<input type="text" class="form-control" name="name" placeholder="{{__('Description')}}" required>
</div>
</div>
<div class="form-row">
<div class="form-group col">
<label for="description" class="form-label">Beschreibung</label>
<input type="text" class="form-control" name="description" placeholder="{{__('Description')}}">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
</div>
</form>
</div>
</div>
<!-- Modal template -->
<div class="modal fade" id="modals-draft">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('travel_program_draft_update') }}" method="post">
@csrf
<input type="hidden" class="form-control" name="id">
<input type="hidden" class="form-control" name="travel_program_id" value="{{$program->id}}">
<div class="modal-header">
<h5 class="modal-title">Vorlage Reiseprogramm <span class="font-weight-light">zuordnen</span></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">×</button>
</div>
<div class="modal-body">
<div class="form-row">
<div class="form-group col">
<label for="draft_id" class="form-label">{{__('Vorlage')}}</label>
<select class="selectpicker" data-style="btn-default" name="draft_id" data-live-search="true" required>
{!! HTMLHelper::getDraftOptions() !!}
</select>
</div>
</div>
<div class="form-row">
<div class="form-group col">
<label for="travel_class_id" class="form-label">{{__('Kategorie')}}</label>
<select class="selectpicker" data-style="btn-default" name="travel_class_id">
{!! HTMLHelper::getTravelClassOptions($program->id) !!}
</select>
</div>
</div>
<div class="form-row">
<div class="form-group col">
<label for="weekdays" class="form-label">{{__('Wochentage')}}</label>
<select class="selectpicker" data-style="btn-default" name="weekdays[]" multiple>
{!! HTMLHelper::getWeekdaysOptions($program->id) !!}
</select>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{{__('close')}}</button>
<button type="submit" class="btn btn-primary">{{__('save')}}</button>
</div>
</form>
</div>
</div>
@if($id !== "new" && $program)
@include('travel.program._modals')
@endif
<script>
$( document ).ready(function() {
$('#modals-class').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
$(this).find(".modal-content input[name='id']").val(button.data('id'));
$(this).find(".modal-body input[name='name']").val(button.data('name'));
$(this).find(".modal-body input[name='description']").val(button.data('description'));
$(this).find(".modal-body input[name='standard']").prop( "checked", button.data('standard'));
$(document).ready(function() {
var collapseHashValue = null;
$('[rel="tooltip"]').tooltip({trigger: "hover", html: true});
$('#top-nav-quick-jump .nav-link').on('click', function (e) {
e.preventDefault();
$('#top-nav-quick-jump .nav-link').removeClass('active');
$(this).addClass('active');
var collapse_id = $(this).data('collapse');
//console.log(collapse_id);
$(collapse_id).collapse('show');
// animate
$('html, body').animate({
scrollTop: $(collapse_id).parent('.card').offset().top
}, 300, function(){
// when done, add hash to url
// (default click behaviour)
window.location.hash = collapse_id;
});
});
$('#modals-draft').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget);
$(this).find(".modal-content input[name='id']").val(button.data('id'));
$(this).find(".modal-body select[name='draft_id']").val(button.data('draft_id'));
$(this).find(".modal-body select[name='travel_class_id']").val(button.data('travel_class_id'));
$(this).find(".modal-body select[name='weekdays[]']").val(button.data('weekdays'));
$(".collapse").on('shown.bs.collapse', function (){
if(collapseHashValue){
$('a[data-collapse="#'+collapseHashValue+'"]').click();
collapseHashValue = null;
}
CookiesAddJSONValue('travel_program_collapse', $(this).attr('id'));
window.location.hash = "#"+$(this).attr('id');
$('.selectpicker').selectpicker('refresh');
});
$(".collapse").on('hidden.bs.collapse', function (){
CookiesRemoveJSONValue('travel_program_collapse', $(this).attr('id'));
});
function init_site(){
if(window.location.hash){
value = $(window.location.hash).attr('id');
if(value){
collapseHashValue = value;
CookiesAddJSONValue('travel_program_collapse', value);
}
}
var travel_program_collapses = Cookies.get('travel_program_collapse');
if (travel_program_collapses != null)
{
travel_program_collapses = JSON.parse(travel_program_collapses);
for (var travel_program_collapse in travel_program_collapses){
$("#"+travel_program_collapses[travel_program_collapse]).collapse("show");
}
}
}
init_site();
});
</script>
@endsection

View file

@ -1,8 +1,10 @@
@extends('layouts.layout-2')
@section('content')
<h4 class="font-weight-bold py-3 mb-1">
Programme
Reiseprogramme
</h4>
<div class="card">

View file

@ -392,6 +392,21 @@ Route::group(['middleware' => ['superadmin', '2fa']], function() {
Route::post('/admin/settings/travel_program/update', 'Settings\TravelAgendaController@update')->name('admin_settings_travel_program_update');
Route::get('/admin/settings/travel_program/delete/{id}', 'Settings\TravelAgendaController@delete')->name('admin_settings_travel_program_delete');
});
Route::group(['middleware' => ['auth.permission:sua-st-tca']], function() {
//SUPERADMIN > Einstellungen > / Reiseart
Route::get('/admin/settings/travel_category/{id?}', 'Settings\TravelCategoryController@index')->name('admin_settings_travel_category');
Route::post('/admin/settings/travel_category/update', 'Settings\TravelCategoryController@update')->name('admin_settings_travel_category_update');
Route::get('/admin/settings/travel_category/delete/{id}', 'Settings\TravelCategoryController@delete')->name('admin_settings_travel_category_delete');
});
Route::group(['middleware' => ['auth.permission:sua-st-tgn']], function() {
//SUPERADMIN > Einstellungen > / Reisehinweise
Route::get('/admin/settings/gerneral_notes/{id?}', 'Settings\TravelGerneralNotesController@index')->name('admin_settings_gerneral_notes');
Route::post('/admin/settings/gerneral_notes/update', 'Settings\TravelGerneralNotesController@update')->name('admin_settings_gerneral_notes_update');
Route::get('/admin/settings/gerneral_notes/delete/{id}', 'Settings\TravelGerneralNotesController@delete')->name('admin_settings_gerneral_notes_delete');
});
Route::group(['middleware' => ['auth.permission:sua-st-tpl']], function() {
//SUPERADMIN > Einstellungen > Reiseorte
Route::get('/admin/settings/travel_places', 'Settings\TravelPlaceController@index')->name('admin_settings_travel_places');
@ -412,14 +427,14 @@ Route::group(['middleware' => ['superadmin', '2fa']], function() {
Route::post('/admin/settings/travel_country/update/{id}', 'Settings\TravelCountryController@update')->name('admin_settings_travel_country_update');
Route::get('/admin/settings/travel_country/delete/{id}/{del?}', 'Settings\TravelCountryController@delete')->name('admin_settings_travel_country_delete');
});
Route::group(['middleware' => ['auth.permission:sua-st-bs']], function() {
Route::group(['middleware' => ['auth.permission:sua-st-tc']], function() {
//SUPERADMIN > Einstellungen > Veranstalter
Route::get('/admin/settings/travel_company', 'Settings\TravelCompanyController@index')->name('admin_settings_travel_company');
Route::get('/admin/settings/travel_company/detail/{id}/{step?}', 'Settings\TravelCompanyController@detail')->name('admin_settings_travel_company_detail');
Route::post('/admin/settings/travel_company/update/{id}', 'Settings\TravelCompanyController@update')->name('admin_settings_travel_company_update');
Route::get('/admin/settings/travel_company/delete/{id}/{del?}', 'Settings\TravelCompanyController@delete')->name('admin_settings_travel_company_delete');
});
Route::group(['middleware' => ['auth.permission:sua-st-bs']], function() {
Route::group(['middleware' => ['auth.permission:sua-st-in']], function() {
//SUPERADMIN > Einstellungen > Versicherungen
Route::get('/admin/settings/insurance', 'Settings\InsuranceController@index')->name('admin_settings_insurance');
Route::post('/admin/settings/insurance/update', 'Settings\InsuranceController@update')->name('admin_settings_insurance_update');
@ -432,6 +447,14 @@ Route::group(['middleware' => ['superadmin', '2fa']], function() {
Route::get('/admin/settings/categories/delete/{id}', 'Settings\CategoryController@delete')->name('admin_settings_categories_delete');
});
Route::group(['middleware' => ['auth.permission:sua-st-tap']], function() {
//SUPERADMIN > Einstellungen > Zielflughafen
Route::get('/admin/settings/travel_arrival_point', 'Settings\TravelArrivalPointController@index')->name('admin_settings_travel_arrival_point');
Route::post('/admin/settings/travel_arrival_point/update', 'Settings\TravelArrivalPointController@update')->name('admin_settings_travel_arrival_point_update');
Route::get('/admin/settings/travel_arrival_point/delete/{id}', 'Settings\TravelArrivalPointController@delete')->name('admin_settings_travel_arrival_point_delete');
});
Route::group(['middleware' => ['auth.permission:sua-re-bo']], function() {
//SUPERADMIN > report > Buchungen
Route::get('/admin/report/bookings', 'Admin\ReportController@bookings')->name('admin_report_bookings');