User Groups and Rights, Fewo

This commit is contained in:
Kevin Adametz 2019-04-10 17:38:52 +02:00
parent c0c2a1822c
commit 26ecb09cdc
22 changed files with 1316 additions and 787 deletions

910
.idea/workspace.xml generated

File diff suppressed because it is too large Load diff

View file

@ -22,8 +22,6 @@ class FewoController extends Controller
public function action($action)
{
if ($action == "create_travel_users") {
$data = \Input::all();
if(!isset($data['travel_user']) && !is_array($data['travel_user'])) {

View file

@ -6,11 +6,13 @@ namespace App\Http\Controllers;
use App\Models\Account;
use App\Repositories\UserRepository;
use App\Services\HTMLHelper;
use App\User;
use Illuminate\Support\Facades\Mail;
use Input;
use Illuminate\Http\Request;
use Request;
use Validator;
use DataTables;
@ -58,7 +60,7 @@ class AdminUserController extends Controller
*/
public function store(Request $request)
{
$data = Input::all();
/* $data = Input::all();
$user = User::findOrFail($data['id']);
$user->admin = $data['admin'];
@ -68,6 +70,7 @@ class AdminUserController extends Controller
\Session()->flash('alert-save', true);
*/
return redirect('/admin/users');
}
@ -82,4 +85,72 @@ class AdminUserController extends Controller
}
public function loadModal($id){
if(Request::ajax()) {
$user = User::findOrFail($id);
$data = [
'user' => $user,
'groups' => config('permissions.groups'),
'roles' => config('permissions.roles')
];
return view("admin.user_modal", $data )->render();
}
return false;
}
public function updateModal($step = false){
if($step == 'user'){
$data = Input::all();
$user = User::findOrFail($data['id']);
$user->permissions = isset($data['permissions']) ? $data['permissions'] : [];
$user->admin = $data['admin'];
$user->confirmed = isset($data['confirmed']) ? true : false;
$user->active = isset($data['active']) ? true : false;
$user->save();
}
\Session()->flash('alert-save', true);
return redirect('/admin/users');
}
//
public function getUsers()
{
//confirmation_code_remider is delete 2
$query = User::where('deleted_at', '=', null);
return \DataTables::eloquent($query)
->addColumn('action_edit', function (User $user) {
return '<a href="' . route('admin_user_edit', [$user->id]) . '" class="btn icon-btn btn-sm btn-primary"><span class="far fa-edit"></span></a>';
})
->addColumn('admin', function (User $user) {
return '<a href="#" data-url="'.route('admin_user_load_modal', $user->id).'" data-data="'.$user->id.'" class="update_modal_data_show">'.HTMLHelper::getRoleLabel($user->admin).'</a>';
})
->addColumn('confirmed', function (User $user) {
return $user->confirmed ? '<span class="badge badge-pill badge-success"><i class="far fa-check"></i></span>' : '<span class="badge badge-pill badge-danger"><i class="far fa-times"></i></span>';
})
->addColumn('active', function (User $user) {
return $user->active ? ' <span class="badge badge-pill badge-success"><i class="far fa-check"></i></span>' : '<span class="badge badge-pill badge-danger"><i class="far fa-times"></i></span>';
})
->addColumn('action_delete', function (User $user) {
return '<a href="' . route('admin_user_delete', [$user->id]) . '" class="btn icon-btn btn-sm btn-danger" onclick="return confirm(\''.__('Really delete entry?').'\');"><span class="far fa-trash"></span></a>';
})
->orderColumn('confirmed', 'confirmed $1')
->orderColumn('active', 'active $1')
->orderColumn('admin', 'active $1')
->rawColumns(['action_edit', 'admin', 'confirmed', 'active', 'action_delete'])
->make(true);
}
}

View file

@ -44,34 +44,6 @@ class DataTableController extends Controller
->make(true);
}*/
public function getUsers()
{
//confirmation_code_remider is delete 2
$query = User::where('deleted_at', '=', null);
return \DataTables::eloquent($query)
->addColumn('action_edit', function (User $user) {
return '<a href="' . route('admin_user_edit', [$user->id]) . '" class="btn icon-btn btn-sm btn-primary"><span class="far fa-edit"></span></a>';
})
->addColumn('admin', function (User $user) {
return '<a href="#" data-toggle="modal" data-target="#modals-default" data-id="'.$user->id.'" data-email="'.$user->email.'" data-admin="'.$user->admin.'" data-active="'.$user->active.'" data-confirmed="'.$user->confirmed.'">'.HTMLHelper::getRoleLabel($user->admin).'</a>';
})
->addColumn('confirmed', function (User $user) {
return $user->confirmed ? '<span class="badge badge-pill badge-success"><i class="far fa-check"></i></span>' : '<span class="badge badge-pill badge-danger"><i class="far fa-times"></i></span>';
})
->addColumn('active', function (User $user) {
return $user->active ? ' <span class="badge badge-pill badge-success"><i class="far fa-check"></i></span>' : '<span class="badge badge-pill badge-danger"><i class="far fa-times"></i></span>';
})
->addColumn('action_delete', function (User $user) {
return '<a href="' . route('admin_user_delete', [$user->id]) . '" class="btn icon-btn btn-sm btn-danger" onclick="return confirm(\''.__('Really delete entry?').'\');"><span class="far fa-trash"></span></a>';
})
->orderColumn('confirmed', 'confirmed $1')
->orderColumn('active', 'active $1')
->orderColumn('admin', 'active $1')
->rawColumns(['action_edit', 'admin', 'confirmed', 'active', 'action_delete'])
->make(true);
}
public function getBookings()
{
//confirmation_code_remider is delete 2

View file

@ -3,9 +3,12 @@
namespace App\Http\Controllers;
use App\Models\FewoPrice;
use App\Models\FewoReservation;
use App\Models\FewoSeason;
use App\Models\TravelUser;
use App\Models\TravelUserBookingFewo;
use Carbon\Carbon;
use Input;
use Validator;
@ -29,16 +32,21 @@ class TravelUserBookingFewoController extends Controller
public function detail($id)
{
$max_adults = 10;
$max_children = 10;
if($id == "new") {
$travel_user_booking_fewo = new TravelUserBookingFewo();
$id = 'new';
}else{
$travel_user_booking_fewo = TravelUserBookingFewo::findOrFail($id);
$max_adults = isset($travel_user_booking_fewo->fewo_lodging->maximum_adults) ? $travel_user_booking_fewo->fewo_lodging->maximum_adults : 10;
$max_children = isset($travel_user_booking_fewo->fewo_lodging->maximum_childs) ? $travel_user_booking_fewo->fewo_lodging->maximum_childs : 10;;
$id = $travel_user_booking_fewo->id;
}
$data = [
'travel_user_booking_fewo' => $travel_user_booking_fewo,
'max_adults' => $max_adults,
'max_children' => $max_children,
'id' => $id,
];
return view('travel.user.booking.detail', $data);
@ -49,6 +57,39 @@ class TravelUserBookingFewoController extends Controller
{
$data = Input::all();
//check for data
$check_for_reservation = true;
$fewo_reservation_id = 0;
if($id > 0) {
$model = TravelUserBookingFewo::findOrFail($id);
if($data['from_date'] == $model->from_date && $data['to_date'] == $model->to_date){
$check_for_reservation = false;
}
$fewo_reservation_id = $model->fewo_reservation_id;
}
if($check_for_reservation){
$from_date = Carbon::parse($data['from_date'])->format('Y-m-d');
$to_date = Carbon::parse($data['to_date'])->format('Y-m-d');
echo "<br>";
$fewos = FewoReservation::where('lodging_id', $data['fewo_lodging_id'])
->where('id', '!=', $fewo_reservation_id)
->where('from_date', '<', $to_date)
->where('to_date', '>', $from_date)
->get();
if($fewos->count()){
$error = [];
foreach ($fewos as $fewo){
$error[] = "Reservierung gefunden: ".$fewo->from_date->format('d.m.Y')." - ".$fewo->to_date->format('d.m.Y');
}
return back()->withInput(Input::all())->withErrors($error);
}
}
//check for
$rules = array(
'travel_user_id' => 'required',
@ -57,27 +98,158 @@ class TravelUserBookingFewoController extends Controller
'to_date'=>'required',
'travel_booking_fewo_channel_id' => 'required',
'status' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
/* $message = 'my custom validation rule message' . $data['from_date'];
Validator::extend('my_custom_validation_rule', function ($attribute, $value, $parameters) {
//
}, $message);
*/
if ($validator->fails()) {
return back()->withInput(Input::all())->withErrors($validator);
}
$set_price = true;
$data['is_calendar_fewo_direct'] = isset($data['is_calendar_fewo_direct']) ? true : false;
$data['is_calendar_hrs'] = isset($data['is_calendar_hrs']) ? true : false;
$data['is_calendar_stern_tours'] = isset($data['is_calendar_stern_tours']) ? true : false;
if($id == "new") {
$model = TravelUserBookingFewo::create($data);
}else{
$model = TravelUserBookingFewo::findOrFail($id);
if($data['from_date'] == $model->from_date && $data['to_date'] == $model->to_date){
$set_price = false;
}
$model->fill($data)->save();
}
$res = $this->calculatePriceNew($model);
$model->daily_prices = $res['season'];
if($set_price){
$model->price_travel = $res['price_travel'];
$model->price_service = $res['price_service'];
$model->price_deposit = $res['price_deposit'];
$model->price_total = $res['price_total'] + $model->getPriceBalanceRaw();
if($fewo_reservation = $model->fewo_reservation){
$model->fewo_reservation->from_date = $model->getFromDateRaw();
$model->fewo_reservation->to_date = $model->getToDateRaw();
$model->fewo_reservation->save();
}
}
if($fewo_reservation = $model->fewo_reservation){
if($model->is_calendar_stern_tours){
$model->fewo_reservation->from_date = $model->getFromDateRaw();
$model->fewo_reservation->to_date = $model->getToDateRaw();
}else{
$model->fewo_reservation->from_date = null;
$model->fewo_reservation->to_date = null;
}
$model->fewo_reservation->save();
}else{
if($model->is_calendar_stern_tours){
$res = FewoReservation::create([
'lodging_id' => $model->fewo_lodging_id,
'from_date' => $model->getFromDateRaw(),
'to_date' => $model->getToDateRaw(),
'status' => 0,
'type' => 0]);
$model->fewo_reservation_id = $res->id;
$model->save();
}
}
$model->save();
\Session()->flash('alert-save', '1');
return redirect(route('travel_user_booking_fewo_detail', [$model->id]));
}
private function calculatePriceNew(TravelUserBookingFewo $travel_user_booking_fewo){
$FewoSeasons = FewoSeason::where('from_date', '<', $travel_user_booking_fewo->getToDateRaw())
->where('to_date', '>=', $travel_user_booking_fewo->getFromDateRaw())
->get();
$seasons = [];
foreach ($FewoSeasons as $fewoSeason){
$FewoPrices = FewoPrice::where('lodging_id', $travel_user_booking_fewo->fewo_lodging_id)->where('season_id', $fewoSeason->id)->get();
$price = [];
foreach ($FewoPrices as $fewoPrice){
$price = $fewoPrice;
}
$seasons[] = [
'name' => $fewoSeason->name,
'fromDay' => $fewoSeason->from_date->format("Y-m-d"),
'toDay' => $fewoSeason->to_date->format("Y-m-d"),
'minimum_stay' => $fewoSeason->minimum_stay,
'price' => $price,
];
}
$fromDate = Carbon::parse($travel_user_booking_fewo->getFromDateRaw());
$toDate = Carbon::parse($travel_user_booking_fewo->gettoDateRaw());
$interval = \DateInterval::createFromDateString('1 day');
$period = new \DatePeriod($fromDate, $interval, $toDate);
$check_days = array();
$result = [];
$result['price_total'] = 0;
$result['price_travel'] = 0;
$result['price_deposit'] = $travel_user_booking_fewo->getPriceDepositRaw();
$result['price_service'] = 0;
$result['days'] = 0;
$result['season'] = [];
$frist_day = false;
//days
foreach ($period as $dt) {
foreach ($seasons as $season) {
if($dt->format("Y-m-d") >= $season['fromDay'] && $dt->format("Y-m-d") <= $season['toDay']){
$check_days[] = $dt->format("d.m.Y");
$price = $season['price'];
$name = $season['name'];
if(!isset($result['season'][$name])){
$result['season'][$name]['fromDay'] = $dt->format("d.m.Y");
$result['price_service'] = $price->flat_price;
$result['season'][$name]['price'] = 0;
$result['season'][$name]['numberDays'] = 0;
$result['season'][$name]['perNight'] = $price->per_night;
$result['season'][$name]['minimumStay'] = $season['minimum_stay'];
}
if(!$frist_day){
$result['season'][$name]['price'] += $price->per_night;
$result['season'][$name]['numberDays'] ++;
$result['season'][$name]['toDay'] = $dt->format("d.m.Y");
$result['price_travel'] += $price->per_night;
$result['days'] ++;
}else{
$frist_day = true;
}
}
}
}
$result['price_total'] = $result['price_deposit'] + $result['price_travel'] + $result['price_service'];
return $result;
}
public function delete($id){
$model = TravelUserBookingFewo::findOrFail($id);
$FewoReservations = FewoReservation::where('lodging_id', $model->fewo_lodging_id)->where('from_date', $model->getFromDateRaw())->where('to_date', $model->getToDateRaw())->get();

View file

@ -82,6 +82,9 @@ class TravelUserController extends Controller
$model = TravelUser::findOrFail($id);
$model->email = time()."@delete.de";
$model->save();
foreach ($model->travel_user_booking_fewos as $travel_user_booking_fewo) {
$travel_user_booking_fewo->delete();
}
$model->delete();
\Session()->flash('alert-success', __('Vorlage gelöscht'));
return redirect(route('travel_users'));

View file

@ -56,6 +56,7 @@ class Kernel extends HttpKernel
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'admin' => \App\Http\Middleware\Admin::class,
'superadmin' => \App\Http\Middleware\SuperAdmin::class,
'auth.permission' => \App\Http\Middleware\AuthPermission::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,

View file

@ -0,0 +1,26 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Auth;
class AuthPermission
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $key)
{
if ( Auth::check() && Auth::user()->isPermission($key) )
{
return $next($request);
}
return redirect('/home');
}
}

View file

@ -53,9 +53,6 @@ class TravelUserBookingFewo extends Model
{
use \Illuminate\Database\Eloquent\SoftDeletes;
protected static $statues = [
0 => 'Anfrage von STERN TOURS',
1 => 'Angebot versandt',
@ -79,6 +76,7 @@ class TravelUserBookingFewo extends Model
protected $casts = [
'travel_user_id' => 'int',
'fewo_lodging_id' => 'int',
'fewo_reservation_id' => 'int',
'persons' => 'int',
'adults' => 'int',
'children' => 'int',
@ -86,6 +84,7 @@ class TravelUserBookingFewo extends Model
'price_travel' => 'float',
'price_deposit' => 'float',
'price_service' => 'float',
'price_balance' => 'float',
'price_total' => 'float',
'travel_booking_fewo_channel_id' => 'int',
'is_calendar_fewo_direct' => 'bool',
@ -103,6 +102,7 @@ class TravelUserBookingFewo extends Model
protected $fillable = [
'travel_user_id',
'fewo_lodging_id',
'fewo_reservation_id',
'invoice_number',
'adults',
'children',
@ -114,6 +114,7 @@ class TravelUserBookingFewo extends Model
'price_travel',
'price_deposit',
'price_service',
'price_balance',
'price_total',
'travel_booking_fewo_channel_id',
'notice',
@ -129,6 +130,11 @@ class TravelUserBookingFewo extends Model
return $this->belongsTo(\App\Models\FewoLodging::class);
}
public function fewo_reservation()
{
return $this->belongsTo(\App\Models\FewoReservation::class, 'fewo_reservation_id');
}
public function travel_booking_fewo_channel()
{
return $this->belongsTo(\App\Models\TravelBookingFewoChannel::class);
@ -241,8 +247,7 @@ class TravelUserBookingFewo extends Model
public function getPriceTravelAttribute($value)
{
if(!$value){ return ""; }
// 2 = decimal places | '.' = decimal seperator | ',' = thousand seperator
if(!$value){ return 0; }
return number_format(($this->attributes['price_travel']), 2, ',', '.');
}
@ -260,8 +265,7 @@ class TravelUserBookingFewo extends Model
public function getPriceDepositAttribute($value)
{
if(!$value){ return ""; }
// 2 = decimal places | '.' = decimal seperator | ',' = thousand seperator
if(!$value){ return 0; }
return number_format(($this->attributes['price_deposit']), 2, ',', '.');
}
@ -279,9 +283,7 @@ class TravelUserBookingFewo extends Model
public function getPriceServiceAttribute($value)
{
if(!$value){ return ""; }
// 2 = decimal places | '.' = decimal seperator | ',' = thousand seperator
if(!$value){ return 0; }
return number_format(($this->attributes['price_service']), 2, ',', '.');
}
@ -290,19 +292,32 @@ class TravelUserBookingFewo extends Model
return isset($this->attributes['price_service']) ? $this->attributes['price_service'] : 0;
}
//price_balance
public function setPriceBalanceAttribute($value)
{
$value = Util::_format_number($value);
$this->attributes['price_balance'] = floatval(str_replace(',', '.', $value));
}
public function getPriceBalanceAttribute($value)
{
if(!$value){ return 0; }
return number_format(($this->attributes['price_balance']), 2, ',', '.');
}
public function getPriceBalanceRaw()
{
return isset($this->attributes['price_balance']) ? $this->attributes['price_balance'] : 0;
}
//price_total
public function setPriceTotalAttribute($value)
{
//$value = Util::_format_number($value);
$value = $this->getPriceDepositRaw() + $this->getPriceServiceRaw() + $this->getPriceTravelRaw();
$this->attributes['price_total'] = floatval($value);
$value = Util::_format_number($value);
$this->attributes['price_total'] = floatval(str_replace(',', '.', $value));
}
public function getPriceTotalAttribute()
public function getPriceTotalAttribute($value)
{
// 2 = decimal places | '.' = decimal seperator | ',' = thousand seperator
$value = $this->getPriceDepositRaw() + $this->getPriceServiceRaw() + $this->getPriceTravelRaw();
$this->attributes['price_total'] = floatval($value);
if(!$value){ return 0; }
return number_format(($this->attributes['price_total']), 2, ',', '.');
}

View file

@ -86,10 +86,11 @@ class HTMLHelper
}
public static function getRolesOptions(){
public static function getRolesOptions($id = 0){
$ret = "";
foreach (self::$roles as $role_id => $value){
$ret .= '<option value="'.$role_id.'">'.$value.'</option>\n';
$attr = ($role_id == $id) ? 'selected="selected"' : '';
$ret .= '<option value="'.$role_id.'" '.$attr.'>'.$value.'</option>\n';
}
return $ret;
}
@ -128,9 +129,9 @@ class HTMLHelper
return $ret;
}
public static function getRangeOptions($id = false, $range = 30, $name = ""){
public static function getRangeOptions($id = false, $range = 30, $name = "", $start=1){
$range = range(1, $range);
$range = range($start, $range);
$ret = "";
foreach ($range as $item){

View file

@ -74,6 +74,10 @@ class User extends Authenticatable
use SoftDeletes;
protected $permissionData = [];
protected $dates = ['deleted_at'];
protected $table = 'users';
@ -96,6 +100,11 @@ class User extends Authenticatable
'password', 'remember_token', 'token',
];
protected $casts = [
'permissions' => 'array',
];
public function account()
{
@ -142,6 +151,35 @@ class User extends Authenticatable
return false;
}
private function setPermissionsDefault(){
$groups = config('permissions.groups');
$permissions = [];
foreach ($groups as $role_id => $perms){
if($role_id <= $this->admin){
foreach ($perms as $key => $val){
$permissions[$key] = 1;
}
}
}
$this->permissions = $permissions;
}
public function isPermission($key){
//default by role
if(!is_array($this->permissions)){
$this->setPermissionsDefault();
}
if($key == strtolower($key)){
if(isset($this->permissions[$key]) && $this->permissions[$key] == 1){
return true;
}
}
return false;
}
/**
* @return string
*/

39
config/permissions.php Executable file
View file

@ -0,0 +1,39 @@
<?php
return [
'groups' =>[
0 => [
'my-dat' => ['name' => 'Ihre Daten' , 'color' => 'client'],
],
1 => [
'crm' => ['name' => 'ADMIN CRM ' , 'color' => 'admin'],
'crm-tp' => ['name' => 'ADMIN CRM > Reiseprogramme' , 'color' => 'admin'],
'crm-tp-pr' => ['name' => 'ADMIN CRM > Reiseprogramme > Programme' , 'color' => 'admin'],
'crm-tp-dr' => ['name' => 'ADMIN CRM > Reiseprogramme > Vorlagen' , 'color' => 'admin'],
'crm-bo' => ['name' => 'ADMIN CRM > Buchungen' , 'color' => 'admin'],
'crm-bo-re' => ['name' => 'ADMIN CRM > Buchungen > Anfragen' , 'color' => 'admin'],
'crm-bo-bo' => ['name' => 'ADMIN CRM > Buchungen > Buchungen' , 'color' => 'admin'],
'crm-cm' => ['name' => 'ADMIN CRM > Kundenverwaltung' , 'color' => 'admin'],
'crm-cm-cf' => ['name' => 'ADMIN CRM > Kundenverwaltung > Kunden (FeWo)' , 'color' => 'admin'],
'crm-cm-bf' => ['name' => 'ADMIN CRM > Kundenverwaltung > Buchungen (FeWo)' , 'color' => 'admin'],
'crm-old-cm' => ['name' => 'ADMIN CRM altes System > Kundenverwaltung' , 'color' => 'info'],
'cms' => ['name' => 'ADMIN CMS' , 'color' => 'secondary'],
'cms-cn' => ['name' => 'ADMIN CMS > Inhalte' , 'color' => 'secondary'],
'cms-tg' => ['name' => 'ADMIN CMS > Reiseführer' , 'color' => 'secondary'],
'cms-fb' => ['name' => 'ADMIN CMS > Feedback' , 'color' => 'secondary'],
'cms-sb' => ['name' => 'ADMIN CMS > Sidebar' , 'color' => 'secondary'],
],
2 => [
'sua-st' => ['name' => 'SUPERADMIN > Einstellungen' , 'color' => 'superadmin'],
'sua-st-tp' => ['name' => 'SUPERADMIN > Einstellungen > Reisprogramme' , 'color' => 'superadmin'],
'sua-st-tc' => ['name' => 'SUPERADMIN > Einstellungen > Reiseländer' , 'color' => 'superadmin'],
'sua-st-tn' => ['name' => 'SUPERADMIN > Einstellungen > Nationalitäten' , 'color' => 'superadmin'],
'sua-ur-rt' => ['name' => 'SUPERADMIN > User Rechte' , 'color' => 'danger'],
],
],
'roles' => [
0 => 'Kunde',
1 => 'Admin',
2 => 'SuperAdmin'
]
];

View file

@ -36,10 +36,13 @@ class CreateUsersTable extends Migration
$table->char('lang', 2)->index();
$table->rememberToken();
$table->timestamp('last_login')->nullable();
$table->string('permissions');
$table->timestamps();
$table->softDeletes();

View file

@ -26,14 +26,7 @@ class CreateFewoSeasonTable extends Migration
$table->longText('description')->nullable();
$table->integer('only_weekday')->nullable();
});
}
/**

View file

@ -18,6 +18,7 @@ class CreateTravelUserBookingFewosTable extends Migration
$table->unsignedInteger('travel_user_id')->index();
$table->integer('fewo_lodging_id')->index();
$table->integer('fewo_reservation_id')->index();
$table->string('invoice_number')->nullable();
@ -34,6 +35,7 @@ class CreateTravelUserBookingFewosTable extends Migration
$table->decimal('price_travel', 13, 2)->nullable();
$table->decimal('price_deposit', 8, 2)->nullable();
$table->decimal('price_service', 8, 2)->nullable();
$table->decimal('price_balance', 8, 2)->nullable();
$table->decimal('price_total', 13, 2)->nullable();
@ -55,15 +57,19 @@ class CreateTravelUserBookingFewosTable extends Migration
$table->softDeletes();
$table->foreign('travel_user_id')
->references('id')
->on('travel_users')
->onDelete('CASCADE');
$table->foreign('fewo_lodging_id')
->references('id')
->on('fewo_lodging')
->onDelete('CASCADE');
$table->foreign('travel_user_id')
$table->foreign('fewo_reservation_id')
->references('id')
->on('travel_users')
->on('fewo_reservation')
->onDelete('CASCADE');

View file

@ -38,3 +38,55 @@
border-color: #c1998f;
}
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label-primary::before,
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label-primary::before {
border-color: #648859 !important;
background-color: #648859 !important;
}
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label-secondary::before,
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label-secondary::before {
border-color: #f2bf24 !important;
background-color: #f2bf24 !important;
}
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label-info::before,
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label-info::before {
border-color: #28c3d7 !important;
background-color: #28c3d7 !important;
}
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label-warning::before,
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label-warning::before {
border-color: #ff844d !important;
background-color: #ff844d !important;
}
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label-danger::before,
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label-danger::before {
border-color: #d9534f !important;
background-color: #d9534f !important;
}
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label-client::before,
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label-client::before {
border-color: #83878b !important;
background-color: #83878B !important;
}
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label-admin::before,
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label-admin::before {
border-color: #f2bf24 !important;
background-color: #f2bf24 !important;
}
.custom-control.custom-checkbox .custom-control-input:checked ~ .custom-control-label-superadmin::before,
.custom-control.custom-radio .custom-control-input:checked ~ .custom-control-label-superadmin::before {
border-color: #648859 !important;
background-color: #648859 !important;
}

View file

@ -3,6 +3,45 @@ $(function () {
// $('[data-toggle="tooltip"]').tooltip();
});
function update_modal_data_show(e, $ele) {
e.preventDefault();
var ele = $ele,
url = ele.data('url'),
data = {id:ele.data('data')} ,
contentType = 'application/x-www-form-urlencoded; charset=UTF-8';
console.log(data);
console.log(url);
$.ajax({
url: url,
data: data,
type: "POST",
dataType: "html",
cache: false,
contentType: contentType,
encode: true,
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
success: function(data) {
// do what ever you want here. add content to <div> if it was not 1 .
console.log(data);
$('#update-modal-content').html(data);
$('.selectpicker').selectpicker(["refresh"]);
$('.input-daterange').datepicker({toggleActive: true,format: 'dd.mm.yyyy'});
// $.Nestable.init();
$('#updateModalShow').modal('show');
},
error: function(xhr, status, errorThrown) {
console.log(xhr);
console.log(xhr.responseText);
console.log(status);
console.log("Sorry, there was a problem!");
}
});
return false;
}
function update_modal_data_load(e, $ele) {
var ele = $ele,

View file

@ -0,0 +1,59 @@
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h5 class="modal-title">{{__('User')}}<span class="font-weight-light">{{__('create/edit')}}</span></h5>
</div>
{!! Form::open(['url' => route('admin_user_update_modal', ['user']), 'class' => 'form-horizontal']) !!}
<div class="modal-body">
<input type="hidden" name="id" id="id" value="{{ $user->id }}">
<div class="form-row">
<div class="form-group col">
<label for="email" class="form-label">{{__('E-Mail')}}</label>
{{ Form::text('email', $user->email, array('placeholder'=>__('E-Mail'), 'class'=>'form-control', 'readonly')) }}
</div>
</div>
<hr>
<div class="form-row">
<div class="form-group col">
<label for="admin" class="form-label">{{__('Role')}}</label>
<select class="selectpicker" data-style="btn-default" name="admin">
{!! HTMLHelper::getRolesOptions($user->admin) !!}
</select>
</div>
</div>
<hr>
@foreach($groups as $role_id => $permissions)
<h6>{{$roles[$role_id]}}</h6>
@foreach($permissions as $key=>$val)
<div class="form-group">
<label class="custom-control custom-checkbox m-0">
{!! Form::checkbox('permissions['.$key.']', 1, $user->isPermission($key), ['class'=>'custom-control-input']) !!}
<span class="custom-control-label custom-control-label-{{$val['color']}}">{{$val['name']}}</span>
</label>
</div>
@endforeach
<hr>
@endforeach
<hr>
<div class="form-group">
<label class="custom-control custom-checkbox m-0">
{!! Form::checkbox('confirmed', 1, $user->confirmed, ['class'=>'custom-control-input']) !!}
<span class="custom-control-label">{{__('verified')}}</span>
</label>
</div>
<div class="form-group">
<label class="custom-control custom-checkbox m-0">
{!! Form::checkbox('active', 1, $user->active, ['class'=>'custom-control-input']) !!}
<span class="custom-control-label">{{__('active')}}</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::close() !!}

View file

@ -29,79 +29,20 @@
</div>
<!-- Modal template -->
<div class="modal fade" id="modals-default">
<div id="updateModalShow" class="modal fade in" tabindex="-1" role="dialog" aria-labelledby="myModalUpdate" aria-hidden="true">
<div class="modal-dialog">
<form class="modal-content" action="{{ route('admin_user_store') }}" method="post">
@csrf
<input type="hidden" class="form-control" name="id">
<div class="modal-header">
<h5 class="modal-title">{{__('User')}}<span class="font-weight-light">{{__('create/edit')}}</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="email" class="form-label">{{__('E-Mail')}}</label>
<input type="text" class="form-control" name="email" placeholder="{{__('E-Mail')}}" readonly>
</div>
</div>
<div class="form-row">
<div class="form-group col">
<label for="admin" class="form-label">{{__('Role')}}</label>
<select class="selectpicker" data-style="btn-default" name="admin">
{!! HTMLHelper::getRolesOptions() !!}
</select>
</div>
</div>
<div class="form-group">
<label class="custom-control custom-checkbox m-0">
<input type="checkbox" class="custom-control-input" name="confirmed" checked>
<span class="custom-control-label">{{__('verified')}}</span>
</label>
</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">{{__('active')}}</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 class="modal-content" id="update-modal-content">
</div>
</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='email']").val(button.data('email'));
$(this).find(".modal-body select[name='admin']").val(button.data('admin'));
$('.selectpicker').selectpicker('refresh');
$(this).find(".modal-body input[name='active']").prop( "checked", button.data('active'));
$(this).find(".modal-body input[name='confirmed']").prop( "checked", button.data('confirmed'));
});
$('.datatables-users').dataTable({
"processing": true,
"serverSide": true,
"ajax": '{!! route('data_table_users') !!}',
"ajax": '{!! route('admin_users_data_table') !!}',
"columns": [
{ data: 'action_edit', orderable: false, searchable: false},
{ data: 'name', name: 'name' },
@ -115,9 +56,19 @@
"iDisplayLength": 50,
"language": {
"url": "/js/German.json"
},
"initComplete": function(settings, json) {
$(".update_modal_data_show").on('click', function (e) {
e.preventDefault();
update_modal_data_show(e, $(this));
});
}
});
});
</script>
@endsection

View file

@ -12,67 +12,78 @@
<a href="{{ route('home') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-home"></i><div>{{__('Home')}}</div></a>
</li>
<li class="sidenav-item{{ Request::is('user/edit') ? ' active' : '' }}">
<a href="{{ route('user_edit') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-create"></i><div>{{ __('Your Data') }}</div></a>
</li>
@if(Auth::user()->isAdmin())
<li class="sidenav-divider mb-1"></li>
<li class="sidenav-header small font-weight-semibold">ADMIN CRM</li>
<li class="sidenav-item{{ Request::is('travel/*') ? ' open' : '' }} {{ Request::is('drafts') ? ' open' : '' }}">
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
<i class="sidenav-icon ion ion-ios-airplane"></i>
<div>Reiseprogramme</div>
</a>
<ul class="sidenav-menu">
<li class="sidenav-item{{ Request::is('travel/*') ? ' active' : '' }}">
<a href="{{ route('travel_programs') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-airplane"></i><div>Programme</div></a>
</li>
<li class="sidenav-item{{ Request::is('drafts') ? ' active' : '' }}">
<a href="{{ route('drafts') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-paper"></i><div>Vorlagen</div></a>
</li>
</ul>
@if(Auth::user()->isPermission('my-dat'))
<li class="sidenav-item{{ Request::is('user/edit') ? ' active' : '' }}">
<a href="{{ route('user_edit') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-create"></i><div>{{ __('Your Data') }}</div></a>
</li>
@endif
<li class="sidenav-item{{ Request::is('requests') ? ' open' : '' }} {{ Request::is('bookings') ? ' open' : '' }} {{ Request::is('booking/*') ? ' open' : '' }}">
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
<i class="sidenav-icon ion ion-md-bed"></i>
<div>Buchungen</div>
</a>
<ul class="sidenav-menu">
<li class="sidenav-item{{ Request::is('requests') ? ' active' : '' }}">
<a href="{{ route('requests') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-search"></i><div>Anfragen</div></a>
</li>
<li class="sidenav-item{{ Request::is('bookings') ? ' active' : '' }} {{ Request::is('booking/*') ? ' active' : '' }}">
<a href="{{ route('bookings') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-bed"></i><div>Buchungen</div></a>
</li>
</ul>
</li>
<li class="sidenav-item{{ Request::is('travel_users') ? ' open' : '' }} {{ Request::is('travel_user/*') ? ' open' : '' }} {{ Request::is('booking/*') ? ' open' : '' }} {{ Request::is('travel_user_booking_fewos') ? ' open' : '' }} {{ Request::is('travel_user_booking_fewo/*') ? ' open' : '' }}">
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
<i class="sidenav-icon ion ion-ios-people"></i>
<div>Kundenverwaltung</div>
</a>
<ul class="sidenav-menu">
<li class="sidenav-item{{ Request::is('travel_users') ? ' active' : '' }} {{ Request::is('travel_user/*') ? ' active' : '' }}">
<a href="{{ route('travel_users') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-people"></i><div>Kunden (FeWo)</div></a>
</li>
<li class="sidenav-item{{ Request::is('travel_user_booking_fewos') ? ' active' : '' }} {{ Request::is('travel_user_booking_fewo/*') ? ' active' : '' }}">
<a href="{{ route('travel_user_booking_fewos') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-bed"></i><div>Buchungen (FeWo)</div></a>
</li>
</ul>
</li>
@if(Auth::user()->isAdmin())
@if(Auth::user()->isPermission('crm'))
<li class="sidenav-divider mb-1"></li>
<li class="sidenav-header small font-weight-semibold">ADMIN CRM</li>
@if(Auth::user()->isPermission('crm-tp'))
<li class="sidenav-item{{ Request::is('travel/*') ? ' open' : '' }} {{ Request::is('drafts') ? ' open' : '' }}">
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
<i class="sidenav-icon ion ion-ios-airplane"></i>
<div>Reiseprogramme</div>
</a>
<ul class="sidenav-menu">
@if(Auth::user()->isPermission('crm-tp-pr'))
<li class="sidenav-item{{ Request::is('travel/*') ? ' active' : '' }}">
<a href="{{ route('travel_programs') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-airplane"></i><div>Programme</div></a>
</li>
@endif
@if(Auth::user()->isPermission('crm-tp-dr'))
<li class="sidenav-item{{ Request::is('drafts') ? ' active' : '' }}">
<a href="{{ route('drafts') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-paper"></i><div>Vorlagen</div></a>
</li>
@endif
</ul>
</li>
@endif
@if(Auth::user()->isPermission('crm-bo'))
<li class="sidenav-item{{ Request::is('requests') ? ' open' : '' }} {{ Request::is('bookings') ? ' open' : '' }} {{ Request::is('booking/*') ? ' open' : '' }}">
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
<i class="sidenav-icon ion ion-md-bed"></i>
<div>Buchungen</div>
</a>
<ul class="sidenav-menu">
@if(Auth::user()->isPermission('crm-bo-re'))
<li class="sidenav-item{{ Request::is('requests') ? ' active' : '' }}">
<a href="{{ route('requests') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-search"></i><div>Anfragen</div></a>
</li>
@endif
@if(Auth::user()->isPermission('crm-bo-bo'))
<li class="sidenav-item{{ Request::is('bookings') ? ' active' : '' }} {{ Request::is('booking/*') ? ' active' : '' }}">
<a href="{{ route('bookings') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-bed"></i><div>Buchungen</div></a>
</li>
@endif
</ul>
</li>
@endif
@if(Auth::user()->isPermission('crm-cm'))
<li class="sidenav-item{{ Request::is('travel_users') ? ' open' : '' }} {{ Request::is('travel_user/*') ? ' open' : '' }} {{ Request::is('booking/*') ? ' open' : '' }} {{ Request::is('travel_user_booking_fewos') ? ' open' : '' }} {{ Request::is('travel_user_booking_fewo/*') ? ' open' : '' }}">
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
<i class="sidenav-icon ion ion-ios-people"></i>
<div>Kundenverwaltung</div>
</a>
<ul class="sidenav-menu">
@if(Auth::user()->isPermission('crm-cm-cf'))
<li class="sidenav-item{{ Request::is('travel_users') ? ' active' : '' }} {{ Request::is('travel_user/*') ? ' active' : '' }}">
<a href="{{ route('travel_users') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-people"></i><div>Kunden (FeWo)</div></a>
</li>
@endif
@if(Auth::user()->isPermission('crm-cm-bf'))
<li class="sidenav-item{{ Request::is('travel_user_booking_fewos') ? ' active' : '' }} {{ Request::is('travel_user_booking_fewo/*') ? ' active' : '' }}">
<a href="{{ route('travel_user_booking_fewos') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-bed"></i><div>Buchungen (FeWo)</div></a>
</li>
@endif
</ul>
</li>
@endif
@endif
@if(Auth::user()->isPermission('crm-old-cm'))
<li class="sidenav-divider mb-1"></li>
<li class="sidenav-header small font-weight-semibold">ADMIN CRM altes System</li>
@ -105,58 +116,68 @@
</li>
</ul>
</li>
<li class="sidenav-divider mb-1"></li>
<li class="sidenav-header small font-weight-semibold">ADMIN CMS</li>
<li class="sidenav-item{{ Request::is('cms/content') ? ' active' : '' }}">
<a href="{{ route('cms_content') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-paper"></i><div>Inhalte</div></a>
</li>
<li class="sidenav-item{{ Request::is('cms/travel_magazine') ? ' active' : '' }}">
<a href="{{ route('cms_travel_magazine') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-map"></i><div>Reiseführer</div></a>
</li>
<li class="sidenav-item{{ Request::is('cms/feedback') ? ' active' : '' }}">
<a href="{{ route('cms_feedback') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-chatboxes"></i><div>Feedback</div></a>
</li>
<li class="sidenav-item{{ Request::is('cms/sidebar') ? ' active' : '' }}">
<a href="{{ route('cms_sidebar') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-list"></i><div>Sidebar</div></a>
</li>
@endif
@if(Auth::user()->isPermission('cms'))
<li class="sidenav-divider mb-1"></li>
<li class="sidenav-header small font-weight-semibold">ADMIN CMS</li>
@if(Auth::user()->isPermission('cms-cn'))
<li class="sidenav-item{{ Request::is('cms/content') ? ' active' : '' }}">
<a href="{{ route('cms_content') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-paper"></i><div>Inhalte</div></a>
</li>
@endif
@if(Auth::user()->isPermission('cms-tg'))
<li class="sidenav-item{{ Request::is('cms/travel_magazine') ? ' active' : '' }}">
<a href="{{ route('cms_travel_magazine') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-map"></i><div>Reiseführer</div></a>
</li>
@endif
@if(Auth::user()->isPermission('cms-fb'))
<li class="sidenav-item{{ Request::is('cms/feedback') ? ' active' : '' }}">
<a href="{{ route('cms_feedback') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-chatboxes"></i><div>Feedback</div></a>
</li>
@endif
@if(Auth::user()->isPermission('cms-sb'))
<li class="sidenav-item{{ Request::is('cms/sidebar') ? ' active' : '' }}">
<a href="{{ route('cms_sidebar') }}" class="sidenav-link"><i class="sidenav-icon ion ion-md-list"></i><div>Sidebar</div></a>
</li>
@endif
@endif
@endif
@if(Auth::user()->isSuperAdmin())
<li class="sidenav-divider mb-1"></li>
<li class="sidenav-header small font-weight-semibold">SUPERADMIN</li>
@if(Auth::user()->isPermission('sua-st'))
<li class="sidenav-item{{ Request::is('admin/settings/*') ? ' open' : '' }}">
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">
<i class="sidenav-icon ion ion-ios-settings"></i>
<div>Einstellungen</div>
</a>
<ul class="sidenav-menu">
@if(Auth::user()->isPermission('sua-st-tp'))
<li class="sidenav-item{{ Request::is('admin/settings/travel/program') ? ' active' : '' }}">
<a href="{{ route('admin_settings_travel_program') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-airplane"></i><div>{{ __('Reiseprogramme') }}</div></a>
</li>
@endif
@if(Auth::user()->isPermission('sua-st-tc'))
<li class="sidenav-item{{ Request::is('admin/settings/travel/country') ? ' active' : '' }}">
<a href="{{ route('admin_settings_travel_country') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-globe"></i><div>{{ __('Reiseländer') }}</div></a>
</li>
@endif
@if(Auth::user()->isPermission('sua-st-tn'))
<li class="sidenav-item{{ Request::is('admin/settings/travel/nationality') ? ' active' : '' }}">
<a href="{{ route('admin_settings_travel_nationality') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-people"></i><div>{{ __('Nationalitäten') }}</div></a>
</li>
@endif
</ul>
</li>
@endif
@if(Auth::user()->isPermission('sua-ur-rt'))
<li class="sidenav-item{{ Request::is('admin/users') ? ' active' : '' }} {{ Request::is('admin/user/edit/*') ? ' active' : '' }}">
<a href="{{ route('admin_users') }}" class="sidenav-link"><i class="sidenav-icon ion ion-ios-ribbon"></i><div>{{ __('User Rechte') }}</div></a>
</li>
@endif
{{-- <li class="sidenav-item{{ Request::is('admin/translate/*') ? ' open' : '' }}">
<a href="javascript:void(0)" class="sidenav-link sidenav-toggle">

View file

@ -36,11 +36,16 @@
<div class="form-group col-sm-4">
<label class="form-label" for="adults">{{ __('Erwachsene') }}</label>
{{ Form::text('adults', $travel_user_booking_fewo->adults, array('placeholder'=>__('Erwachsene'), 'class'=>'form-control')) }}
<select class="selectpicker" data-style="btn-light" name="adults" required>
{!! HTMLHelper::getRangeOptions($travel_user_booking_fewo->adults, $max_adults, '', 0) !!}
</select>
</div>
<div class="form-group col-sm-4">
<label class="form-label" for="children">{{ __('Kinder') }}</label>
{{ Form::text('children', $travel_user_booking_fewo->children, array('placeholder'=>__('Kinder'), 'class'=>'form-control')) }}
<select class="selectpicker" data-style="btn-light" name="children" required>
{!! HTMLHelper::getRangeOptions($travel_user_booking_fewo->children, $max_children, '', 0) !!}
</select>
</div>
<div class="form-group col-sm-4">
<label class="form-label" for="persons">{{ __('Personen Gesamt') }}*</label>
@ -58,29 +63,38 @@
<label class="form-label" for="to_date">{{ __('Datum bis') }}*</label>
{{ Form::text('to_date', $travel_user_booking_fewo->to_date, array('placeholder'=>__('Datum bis'), 'class'=>'form-control datepicker-base', 'required'=>true)) }}
</div>
<div class="form-group col-sm-12">
<em>Änderungen werden nicht bei den Reservierungen geändert!</em>
</div>
</div>
<hr>
<div class="form-row">
<div class="form-group col-sm-3">
<label class="form-label" for="price_travel">{{ __('Preis Übernachtungen') }}*</label>
{{ Form::text('price_travel', $travel_user_booking_fewo->price_travel, array('placeholder'=>__('Preis Übernachtungen'), 'class'=>'form-control')) }}
@if(isset($travel_user_booking_fewo->daily_prices))
@foreach($travel_user_booking_fewo->daily_prices as $s => $d)
<div class="form-group col-sm-12">
{{$s}} | {{$d['fromDay']}} - {{$d['toDay']}} | {{$d['numberDays']}} Tage x {{$d['perNight']}} / pro Nacht | <strong>{{$d['price']}} Gesamt</strong>
</div>
@endforeach
@endif
<div class="form-group col-sm-4 col-md-2">
<label class="form-label" for="price_travel">{{ __('Mitpreis alle Tage') }}</label>
{{ Form::text('price_travel', $travel_user_booking_fewo->price_travel, array('placeholder'=>__('Preis Übernachtungen'), 'class'=>'form-control input-auto-calc')) }}
</div>
<div class="form-group col-sm-3">
<label class="form-label" for="price_service">{{ __('Preis Service-Gebühr') }}*</label>
{{ Form::text('price_service', $travel_user_booking_fewo->price_service, array('placeholder'=>__('Preis Service-Gebühr'), 'class'=>'form-control')) }}
<div class="form-group col-sm-4 col-md-2">
<label class="form-label" for="price_service">{{ __('Preis Service-Gebühr') }}</label>
{{ Form::text('price_service', $travel_user_booking_fewo->price_service, array('placeholder'=>__('Preis Service-Gebühr'), 'class'=>'form-control input-auto-calc')) }}
</div>
<div class="form-group col-sm-3">
<label class="form-label" for="price_deposit">{{ __('Preis Kaution') }}*</label>
{{ Form::text('price_deposit', $travel_user_booking_fewo->price_deposit, array('placeholder'=>__('Preis Kaution'), 'class'=>'form-control')) }}
<div class="form-group col-sm-4 col-md-2">
<label class="form-label" for="price_deposit">{{ __('Preis Kaution') }}</label>
{{ Form::text('price_deposit', $travel_user_booking_fewo->price_deposit, array('placeholder'=>__('Preis Kaution'), 'class'=>'form-control input-auto-calc')) }}
</div>
<div class="form-group col-sm-3">
<div class="form-group col-sm-6 col-md-3">
<label class="form-label" for="price_balance">{{ __('Provisionsausgleich durch Vertriebskanal') }}</label>
{{ Form::text('price_balance', $travel_user_booking_fewo->price_balance, array('placeholder'=>__(' Provisionsausgleich durch Vertriebskanal'), 'class'=>'form-control input-auto-calc')) }}
</div>
<div class="form-group col-sm-6 col-md-3">
<label class="form-label" for="price_total">{{ __('Preis Gesamt') }}*</label>
{{ Form::text('price_total', $travel_user_booking_fewo->price_total, array('placeholder'=>__('Preis Gesamt'), 'class'=>'form-control', 'readonly')) }}
{{ Form::text('price_total', $travel_user_booking_fewo->price_total, array('placeholder'=>__('Preis Gesamt'), 'class'=>'form-control')) }}
</div>
</div>
@ -104,7 +118,11 @@
<div class="form-group col-sm-4">
<label class="custom-control custom-checkbox">
{!! Form::checkbox('is_calendar_stern_tours', 1, $travel_user_booking_fewo->is_calendar_stern_tours, ['class'=>'custom-control-input']) !!}
<span class="custom-control-label">{{__('STERN TOURS')}}</span>
<span class="custom-control-label">{{__('STERN TOURS')}} <br>Reservierung:
@if($travel_user_booking_fewo->fewo_reservation && isset($travel_user_booking_fewo->fewo_reservation->from_date))
{{ $travel_user_booking_fewo->fewo_reservation->from_date->format('d.m.Y') }} - {{ $travel_user_booking_fewo->fewo_reservation->to_date->format('d.m.Y') }}
@endif
</span>
</label>
</div>
</div>
@ -137,8 +155,25 @@
{{ Form::textarea('notice', $travel_user_booking_fewo->notice, ['class' => 'form-control', 'rows'=>4]) }}
</div>
</div>
</div>
</div>
</div>
<script>
function floatNumber(n) {
'use strict';
n = n.replace(/\./g, '').replace(',', '.');
return parseFloat(n);
}
$( document ).ready(function() {
$('input.input-auto-calc').on('change', function () {
price_travel = floatNumber($("input[name='price_travel']").val());
price_service = floatNumber($("input[name='price_service']").val());
price_deposit = floatNumber($("input[name='price_deposit']").val());
price_balance =floatNumber($("input[name='price_balance']").val());
price_total = parseFloat(price_travel + price_service + price_deposit + price_balance);
price_total = parseFloat((Math.round(price_total * 100) / 100)).toFixed(2).replace(".", ",");
$("input[name='price_total']").val(price_total);
});
});
</script>

View file

@ -80,131 +80,135 @@ Route::group(['middleware' => ['auth']], function()
/* Route::get('/user/edit', 'UserController@userEdit')->name('user_edit');
*/
Route::get('/user/edit', 'UserDataController@userEdit')->name('user_edit');
Route::post('/user/edit', 'UserDataController@userEditStore')->name('user_edit');
Route::group(['middleware' => ['auth.permission:my-dat']], function() {
Route::get('/user/edit', 'UserDataController@userEdit')->name('user_edit');
Route::post('/user/edit', 'UserDataController@userEditStore')->name('user_edit');
Route::get('/user/update_password', 'UserUpdatePasswordController@updatePassword')->name('user_update_password');
Route::post('/user/update_password', 'UserUpdatePasswordController@updatePasswordStore')->name('user_update_password');
Route::get('/user/update_password_first', 'UserUpdatePasswordController@updatePasswordFirst')->name('user_update_password_first');
Route::post('/user/update_password_first', 'UserUpdatePasswordController@updatePasswordFirstStore')->name('user_update_password_first');
Route::get('/user/update_email', 'UserUpdateEmailController@index')->name('user_update_email');
Route::post('/user/update_email', 'UserUpdateEmailController@update')->name('user_update_email');
Route::get('/user/delete_account', 'UserDeleteController@deleteAccount')->name('user_delete_account');
Route::post('/user/delete_account', 'UserDeleteController@deleteAccountAction')->name('user_delete_account');
Route::post('/user/data/accepted/form', 'UserDataController@userDataAcceptedForm')->name('user_data_accepted_form');
Route::get('/user/update_password', 'UserUpdatePasswordController@updatePassword')->name('user_update_password');
Route::post('/user/update_password', 'UserUpdatePasswordController@updatePasswordStore')->name('user_update_password');
Route::get('/user/update_password_first', 'UserUpdatePasswordController@updatePasswordFirst')->name('user_update_password_first');
Route::post('/user/update_password_first', 'UserUpdatePasswordController@updatePasswordFirstStore')->name('user_update_password_first');
Route::get('/user/update_email', 'UserUpdateEmailController@index')->name('user_update_email');
Route::post('/user/update_email', 'UserUpdateEmailController@update')->name('user_update_email');
Route::get('/user/delete_account', 'UserDeleteController@deleteAccount')->name('user_delete_account');
Route::post('/user/delete_account', 'UserDeleteController@deleteAccountAction')->name('user_delete_account');
Route::post('/user/data/accepted/form', 'UserDataController@userDataAcceptedForm')->name('user_data_accepted_form');
});
});
Route::group(['middleware' => ['admin']], function()
{
//drafts
Route::get('/drafts/{step?}', 'DraftController@index')->name('drafts');
Route::get('/draft/detail/{id}', 'DraftController@detail')->name('draft_detail');
Route::post('/draft/detail/{id}', 'DraftController@store')->name('draft_detail');
Route::group(['middleware' => ['auth.permission:crm-tp-pr']], function() {
//Reiseprogramme Programme
Route::get('/travel/programs/{step?}', 'TravelProgramController@index')->name('travel_programs');
Route::get('/draft/item/delete/{id}', 'DraftController@itemDelete')->name('draft_item_delete');
Route::get('/draft/delete/{id}', 'DraftController@delete')->name('draft_delete');
Route::get('/travel/program/detail/{id}', 'TravelProgramController@detail')->name('travel_program_detail');
Route::post('/travel/program/detail/{id}', 'TravelProgramController@store')->name('travel_program_detail');
Route::post('/draft/type/update', 'DraftController@typeUpdate')->name('draft_type_update');
Route::get('/draft/type/delete/{id}', 'DraftController@typeDelete')->name('draft_type_delete');
Route::post('/travel/program/class/update', 'TravelProgramController@classUpdate')->name('travel_program_class_update');
Route::get('/travel/program/class/delete/{id}', 'TravelProgramController@classDelete')->name('travel_program_class_delete');
Route::get('/draft/load/new', 'DraftController@loadNew')->name('draft_load_new');
Route::post('/draft/load/new', 'DraftController@loadNewAction')->name('draft_load_new');
Route::post('/travel/program/draft/update', 'TravelProgramController@draftUpdate')->name('travel_program_draft_update');
Route::get('/travel/program/draft/delete/{id}', 'TravelProgramController@draftDelete')->name('travel_program_draft_delete');
});
Route::get('/draft/load/old', 'DraftController@loadOld')->name('draft_load_old');
Route::post('/draft/load/old', 'DraftController@loadOldAction')->name('draft_load_old');
Route::group(['middleware' => ['auth.permission:crm-tp-dr']], function() {
//Reiseprogramme Vorlagen
Route::get('/drafts/{step?}', 'DraftController@index')->name('drafts');
//travel Programs
Route::get('/travel/programs/{step?}', 'TravelProgramController@index')->name('travel_programs');
Route::get('/draft/detail/{id}', 'DraftController@detail')->name('draft_detail');
Route::post('/draft/detail/{id}', 'DraftController@store')->name('draft_detail');
Route::get('/travel/program/detail/{id}', 'TravelProgramController@detail')->name('travel_program_detail');
Route::post('/travel/program/detail/{id}', 'TravelProgramController@store')->name('travel_program_detail');
Route::get('/draft/item/delete/{id}', 'DraftController@itemDelete')->name('draft_item_delete');
Route::get('/draft/delete/{id}', 'DraftController@delete')->name('draft_delete');
Route::post('/travel/program/class/update', 'TravelProgramController@classUpdate')->name('travel_program_class_update');
Route::get('/travel/program/class/delete/{id}', 'TravelProgramController@classDelete')->name('travel_program_class_delete');
Route::post('/draft/type/update', 'DraftController@typeUpdate')->name('draft_type_update');
Route::get('/draft/type/delete/{id}', 'DraftController@typeDelete')->name('draft_type_delete');
Route::post('/travel/program/draft/update', 'TravelProgramController@draftUpdate')->name('travel_program_draft_update');
Route::get('/travel/program/draft/delete/{id}', 'TravelProgramController@draftDelete')->name('travel_program_draft_delete');
Route::get('/draft/load/new', 'DraftController@loadNew')->name('draft_load_new');
Route::post('/draft/load/new', 'DraftController@loadNewAction')->name('draft_load_new');
//bookings
Route::get('data/table/bookings', 'DataTableController@getBookings')->name('data_table_bookings');
Route::get('/bookings/{step?}', 'BookingController@index')->name('bookings');
Route::get('/booking/detail/{id}', 'BookingController@detail')->name('booking_detail');
Route::post('/booking/detail/{id}', 'BookingController@store')->name('booking_detail');
Route::get('/draft/load/old', 'DraftController@loadOld')->name('draft_load_old');
Route::post('/draft/load/old', 'DraftController@loadOldAction')->name('draft_load_old');
});
Route::get('/booking/draft_item/delete/{id}', 'BookingController@draftItemDelete')->name('booking_draft_item_delete');
Route::group(['middleware' => ['auth.permission:crm-bo-re']], function() {
//Buchungen > Anfragen
Route::get('/requests/{step?}', 'RequestController@index')->name('requests');
//Route::get('/lead/detail/{id}', 'LeadController@detail')->name('lead_detail');
Route::get('data/table/requests', 'DataTableController@getRequests')->name('data_table_requests');
});
Route::group(['middleware' => ['auth.permission:crm-bo-bo']], function() {
//Buchungen > Buchungen
Route::get('data/table/bookings', 'DataTableController@getBookings')->name('data_table_bookings');
Route::get('/bookings/{step?}', 'BookingController@index')->name('bookings');
Route::get('/booking/detail/{id}', 'BookingController@detail')->name('booking_detail');
Route::post('/booking/detail/{id}', 'BookingController@store')->name('booking_detail');
Route::get('/booking/draft_item/delete/{id}', 'BookingController@draftItemDelete')->name('booking_draft_item_delete');
});
Route::group(['middleware' => ['auth.permission:crm-bo-bo']], function() {
//Kundenverwaltung > Kunden (FeWo
Route::get('/travel_users', 'TravelUserController@index')->name('travel_users');
Route::get('/data/table/travel_users', 'TravelUserController@getTravelUsers')->name('data_table_travel_users');
Route::get('/travel_user/detail/{id}', 'TravelUserController@detail')->name('travel_user_detail');
Route::post('/travel_user/detail/{id}', 'TravelUserController@store')->name('travel_user_detail');
Route::get('/travel_user/delete/{id}', 'TravelUserController@delete')->name('travel_user_delete');
});
Route::group(['middleware' => ['auth.permission:crm-bo-bf']], function() {
//Kundenverwaltung > Buchungen (FeWo
Route::get('/travel_user_booking_fewos', 'TravelUserBookingFewoController@index')->name('travel_user_booking_fewos');
Route::get('/data/table/travel_user_booking_fewos', 'TravelUserBookingFewoController@getTravelUserBookingFewos')->name('data_table_travel_user_booking_fewos');
Route::get('/travel_user_booking_fewo/detail/{id}', 'TravelUserBookingFewoController@detail')->name('travel_user_booking_fewo_detail');
Route::post('/travel_user_booking_fewo/detail/{id}', 'TravelUserBookingFewoController@store')->name('travel_user_booking_fewo_detail');
Route::get('/travel_user_booking_fewo/delete/{id}', 'TravelUserBookingFewoController@delete')->name('travel_user_booking_fewo_delete');
});
Route::group(['middleware' => ['auth.permission:cms-cn']], function() {
// CMS Inhalte
Route::get('/cms/content', 'CMS\CMSContentController@index')->name('cms_content');
Route::post('/cms/content/store', 'CMS\CMSContentController@store')->name('cms_content_store');
Route::post('/cms/content/load/modal', 'CMS\CMSContentController@loadModal')->name('cms_content_load_modal');
Route::get('/cms/content/delete/{id}', 'CMS\CMSContentController@delete')->name('cms_content_delete');
});
Route::group(['middleware' => ['auth.permission:cms-tg']], function() {
// CMS Reiseführer
Route::get('/cms/travel_magazine', 'CMS\CMSTravelMagazineController@index')->name('cms_travel_magazine');
Route::get('/cms/travel_magazine/detail/{id}', 'CMS\CMSTravelMagazineController@detail')->name('cms_travel_magazine_detail');
Route::post('/cms/travel_magazine/detail/{id}', 'CMS\CMSTravelMagazineController@store')->name('cms_travel_magazine_detail');
Route::get('/cms/travel_magazine/delete/{id}', 'CMS\CMSTravelMagazineController@delete')->name('cms_travel_magazine_delete');
});
Route::group(['middleware' => ['auth.permission:cms-fb']], function() {
// CMS Feedback
Route::get('/cms/feedback', 'CMS\CMSFeedbackController@index')->name('cms_feedback');
Route::get('/cms/feedback/detail/{id}', 'CMS\CMSFeedbackController@detail')->name('cms_feedback_detail');
Route::post('/cms/feedback/detail/{id}', 'CMS\CMSFeedbackController@store')->name('cms_feedback_detail');
Route::get('/cms/feedback/delete/{id}', 'CMS\CMSFeedbackController@delete')->name('cms_feedback_delete');
});
Route::get('/requests/{step?}', 'RequestController@index')->name('requests');
Route::get('/lead/detail/{id}', 'LeadController@detail')->name('lead_detail');
Route::get('data/table/requests', 'DataTableController@getRequests')->name('data_table_requests');
//travel_users
Route::get('/travel_users', 'TravelUserController@index')->name('travel_users');
Route::get('/data/table/travel_users', 'TravelUserController@getTravelUsers')->name('data_table_travel_users');
Route::get('/travel_user/detail/{id}', 'TravelUserController@detail')->name('travel_user_detail');
Route::post('/travel_user/detail/{id}', 'TravelUserController@store')->name('travel_user_detail');
Route::get('/travel_user/delete/{id}', 'TravelUserController@delete')->name('travel_user_delete');
//travel_user_booking_fewo
Route::get('/travel_user_booking_fewos', 'TravelUserBookingFewoController@index')->name('travel_user_booking_fewos');
Route::get('/data/table/travel_user_booking_fewos', 'TravelUserBookingFewoController@getTravelUserBookingFewos')->name('data_table_travel_user_booking_fewos');
Route::get('/travel_user_booking_fewo/detail/{id}', 'TravelUserBookingFewoController@detail')->name('travel_user_booking_fewo_detail');
Route::post('/travel_user_booking_fewo/detail/{id}', 'TravelUserBookingFewoController@store')->name('travel_user_booking_fewo_detail');
Route::get('/travel_user_booking_fewo/delete/{id}', 'TravelUserBookingFewoController@delete')->name('travel_user_booking_fewo_delete');
//CMS
//feedback
Route::get('/cms/feedback', 'CMS\CMSFeedbackController@index')->name('cms_feedback');
Route::get('/cms/feedback/detail/{id}', 'CMS\CMSFeedbackController@detail')->name('cms_feedback_detail');
Route::post('/cms/feedback/detail/{id}', 'CMS\CMSFeedbackController@store')->name('cms_feedback_detail');
Route::get('/cms/feedback/delete/{id}', 'CMS\CMSFeedbackController@delete')->name('cms_feedback_delete');
Route::get('/cms/travel_magazine', 'CMS\CMSTravelMagazineController@index')->name('cms_travel_magazine');
Route::get('/cms/travel_magazine/detail/{id}', 'CMS\CMSTravelMagazineController@detail')->name('cms_travel_magazine_detail');
Route::post('/cms/travel_magazine/detail/{id}', 'CMS\CMSTravelMagazineController@store')->name('cms_travel_magazine_detail');
Route::get('/cms/travel_magazine/delete/{id}', 'CMS\CMSTravelMagazineController@delete')->name('cms_travel_magazine_delete');
Route::get('/cms/sidebar', 'CMS\CMSSidebarController@index')->name('cms_sidebar');
Route::get('/cms/sidebar/detail/{id}', 'CMS\CMSSidebarController@detail')->name('cms_sidebar_detail');
Route::post('/cms/sidebar/detail/{id}', 'CMS\CMSSidebarController@store')->name('cms_sidebar_detail');
Route::get('/cms/sidebar/delete/{id}', 'CMS\CMSSidebarController@delete')->name('cms_sidebar_delete');
Route::get('/cms/content', 'CMS\CMSContentController@index')->name('cms_content');
Route::post('/cms/content/store', 'CMS\CMSContentController@store')->name('cms_content_store');
Route::post('/cms/content/load/modal', 'CMS\CMSContentController@loadModal')->name('cms_content_load_modal');
Route::get('/cms/content/delete/{id}', 'CMS\CMSContentController@delete')->name('cms_content_delete');
Route::group(['middleware' => ['auth.permission:cms-sb']], function() {
// CMS Sidebar
Route::get('/cms/sidebar', 'CMS\CMSSidebarController@index')->name('cms_sidebar');
Route::get('/cms/sidebar/detail/{id}', 'CMS\CMSSidebarController@detail')->name('cms_sidebar_detail');
Route::post('/cms/sidebar/detail/{id}', 'CMS\CMSSidebarController@store')->name('cms_sidebar_detail');
Route::get('/cms/sidebar/delete/{id}', 'CMS\CMSSidebarController@delete')->name('cms_sidebar_delete');
});
});
//login pages for worker
Route::group(['middleware' => ['superadmin']], function() {
//leads
Route::get('/admin/users', 'AdminUserController@index')->name('admin_users');
Route::get('/admin/user/edit/{user_id}', 'AdminUserController@edit')->name('admin_user_edit');
Route::post('/admin/user/store', 'AdminUserController@store')->name('admin_user_store');
Route::get('/admin/user/delete/{user_id}', 'AdminUserController@deleteUser')->name('admin_user_delete');
Route::get('data_table', 'DataTableController@datatable')->name('data_table');
// Route::get('datatables/leads', 'DataTableController@getLeads')->name('datatables-leads');
Route::get('data/table/users', 'DataTableController@getUsers')->name('data_table_users');
Route::get('/admin/translate/all', 'TranslationController@index')->name('admin_translate_all');
Route::get('/admin/translate/all/edit/{lang}/{from?}', 'TranslationController@edit')->name('admin_translate_all_edit');
Route::post('/admin/translate/all/update/{lang}/{from?}', 'TranslationController@update')->name('admin_translate_all_update');
@ -213,22 +217,36 @@ Route::group(['middleware' => ['superadmin']], function() {
Route::get('/admin/translation/file/{file}/{language?}/{langsource?}/{show?}', 'TranslationFileController@edit')->name('admin_translate_file_edit');
Route::post('/admin/translation/file/{file}/{language?}/{langsource?}/{show?}', 'TranslationFileController@update')->name('admin_translate_file_update');
Route::group(['middleware' => ['auth.permission:sua-st-tp']], function() {
//SUPERADMIN > Einstellungen > Reisprogramme
Route::get('/admin/settings/travel/program/{id?}', 'Settings\TravelAgendaController@index')->name('admin_settings_travel_program');
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-tc']], function() {
//SUPERADMIN > Einstellungen > Reiseländer
Route::get('/admin/settings/travel/country', 'Settings\TravelCountryController@index')->name('admin_settings_travel_country');
Route::get('/admin/settings/travel/country/detail/{id}', 'Settings\TravelCountryController@detail')->name('admin_settings_travel_country_detail');
Route::post('/admin/settings/travel/country/detail/{id}', 'Settings\TravelCountryController@store')->name('admin_settings_travel_country_detail');
Route::get('/admin/settings/travel/country/delete/{id}', 'Settings\TravelCountryController@delete')->name('admin_settings_travel_country_delete');
});
Route::group(['middleware' => ['auth.permission:sua-st-tn']], function() {
//SUPERADMIN > Einstellungen > Nationalitäten
Route::get('/admin/settings/travel/nationality', 'Settings\TravelNationalityController@index')->name('admin_settings_travel_nationality');
Route::post('/admin/settings/travel/nationality/update', 'Settings\TravelNationalityController@update')->name('admin_settings_travel_nationality_update');
Route::get('/admin/settings/travel/nationality/delete/{id}', 'Settings\TravelNationalityController@delete')->name('admin_settings_travel_nationality_delete');
});
Route::group(['middleware' => ['auth.permission:sua-ur-rt']], function() {
//SUPERADMIN > User Rechte
Route::get('/admin/users', 'AdminUserController@index')->name('admin_users');
Route::get('/admin/user/edit/{user_id}', 'AdminUserController@edit')->name('admin_user_edit');
Route::post('/admin/user/store', 'AdminUserController@store')->name('admin_user_store');
Route::get('/admin/user/delete/{user_id}', 'AdminUserController@deleteUser')->name('admin_user_delete');
Route::get('/admin/users/data_table', 'AdminUserController@getUsers')->name('admin_users_data_table');
Route::get('/admin/settings/travel/country', 'Settings\TravelCountryController@index')->name('admin_settings_travel_country');
Route::get('/admin/settings/travel/country/detail/{id}', 'Settings\TravelCountryController@detail')->name('admin_settings_travel_country_detail');
Route::post('/admin/settings/travel/country/detail/{id}', 'Settings\TravelCountryController@store')->name('admin_settings_travel_country_detail');
Route::get('/admin/settings/travel/country/delete/{id}', 'Settings\TravelCountryController@delete')->name('admin_settings_travel_country_delete');
Route::get('/admin/settings/travel/nationality', 'Settings\TravelNationalityController@index')->name('admin_settings_travel_nationality');
Route::post('/admin/settings/travel/nationality/update', 'Settings\TravelNationalityController@update')->name('admin_settings_travel_nationality_update');
Route::get('/admin/settings/travel/nationality/delete/{id}', 'Settings\TravelNationalityController@delete')->name('admin_settings_travel_nationality_delete');
Route::get('/admin/settings/travel/program/{id?}', 'Settings\TravelAgendaController@index')->name('admin_settings_travel_program');
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::post('/admin/users/load/modal/{id}', 'AdminUserController@loadModal')->name('admin_user_load_modal');
Route::post('/admin/users/update/modal/{step}', 'AdminUserController@updateModal')->name('admin_user_update_modal');
});
});