1420 lines
86 KiB
PHP
1420 lines
86 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Loan;
|
|
|
|
use App\Helpers\Logger;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\Cabel;
|
|
use App\Models\Contract;
|
|
use App\Models\Loan;
|
|
use App\Models\LoanType;
|
|
use App\Models\Permission;
|
|
use App\Models\Product;
|
|
use App\Models\Room;
|
|
use App\Models\User;
|
|
use Barryvdh\DomPDF\Facade\Pdf;
|
|
use DateTime;
|
|
use Illuminate\Auth\Access\Response;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Carbon;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use Mailjet\Client;
|
|
use Mailjet\Resources;
|
|
|
|
class ReservationController extends Controller
|
|
{
|
|
public function index(Request $request){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_viewAny'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$search_types = [];
|
|
array_push($search_types,array("value" => "username", "name" => "user"));
|
|
array_push($search_types,array("value" => "room", "name" => "room"));
|
|
array_push($search_types,array("value" => "start", "name" => "date_start"));
|
|
array_push($search_types,array("value" => "end", "name" => "date_end"));
|
|
|
|
|
|
$PerPagination = $request->input('p') ?? 10;
|
|
$search_term = $request->input('search_term');
|
|
$search_type = $request->input('search_type');
|
|
$search_compare = $request->input('search_compare');
|
|
|
|
if($search_term != ""){
|
|
switch ($search_type){
|
|
case('username'):
|
|
switch($search_compare){
|
|
case('='):
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','=',$search_term);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','=',$search_term);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','like','%'.$search_term.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','like','%'.$search_term.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case('room'):
|
|
$parts = explode('.',$search_term);
|
|
$total_parts = count($parts);
|
|
if($total_parts == 1){
|
|
$room = $search_term;
|
|
}
|
|
else{
|
|
$room = $parts[1];
|
|
}
|
|
switch($search_compare){
|
|
case('='):
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','=',$room);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','=',$room);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','like','%'.$room.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','like','%'.$room.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
case('start'):
|
|
$parts = explode('.',$search_term);
|
|
$d = $parts[0];
|
|
$m = $parts[1];
|
|
$y = $parts[2];
|
|
$constructed_date = $y."-".$m."-".$d;
|
|
switch($search_compare){
|
|
case('>='):
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_start','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_start','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
case('<='):
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_start','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_start','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_start','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_start','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
case('end'):
|
|
$parts = explode('.',$search_term);
|
|
$d = $parts[0];
|
|
$m = $parts[1];
|
|
$y = $parts[2];
|
|
$constructed_date = $y."-".$m."-".$d;
|
|
switch($search_compare){
|
|
case('>='):
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_end','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_end','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
case('<='):
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_end','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_end','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_end','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->where('date_end','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
}
|
|
else{
|
|
$reservations_display = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations_track = Loan::where('loan_type_id','!=',LoanType::where('name','=','Loan')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
}
|
|
|
|
return view('reservations.index')
|
|
->with('search_types',$search_types)
|
|
->with('data',$reservations_display)
|
|
->with('reservations',$reservations_track)
|
|
->with('data_name','reservation')
|
|
->with('data_names','reservations')
|
|
;
|
|
}
|
|
|
|
public function pickups(Request $request){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_pickup'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$search_types = [];
|
|
array_push($search_types,array("value" => "username", "name" => "user"));
|
|
array_push($search_types,array("value" => "room", "name" => "room"));
|
|
array_push($search_types,array("value" => "start", "name" => "date_start"));
|
|
array_push($search_types,array("value" => "end", "name" => "date_end"));
|
|
|
|
|
|
$PerPagination = $request->input('p') ?? 10;
|
|
$search_term = $request->input('search_term');
|
|
$search_type = $request->input('search_type');
|
|
$search_compare = $request->input('search_compare');
|
|
|
|
if($search_term != ""){
|
|
switch ($search_type) {
|
|
case('username'):
|
|
switch ($search_compare) {
|
|
case('='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','=',$search_term);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','=',$search_term);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','like','%'.$search_term.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','like','%'.$search_term).'%';
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
|
|
}
|
|
break;
|
|
case('room'):
|
|
$parts = explode('.',$search_term);
|
|
$total_parts = count($parts);
|
|
if($total_parts == 1){
|
|
$room = $search_term;
|
|
}
|
|
else{
|
|
$room = $parts[1];
|
|
}
|
|
switch($search_compare){
|
|
case('='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','=',$room);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','=',$room);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','like','%'.$room.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','like','%'.$room.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
case('start'):
|
|
$parts = explode('.',$search_term);
|
|
$d = $parts[0];
|
|
$m = $parts[1];
|
|
$y = $parts[2];
|
|
$constructed_date = $y."-".$m."-".$d;
|
|
switch($search_compare){
|
|
case('>='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_start','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_start','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
case('<='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_start','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_start','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_start','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_start','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
case('end'):
|
|
$parts = explode('.',$search_term);
|
|
$d = $parts[0];
|
|
$m = $parts[1];
|
|
$y = $parts[2];
|
|
$constructed_date = $y."-".$m."-".$d;
|
|
switch($search_compare){
|
|
case('>='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_end','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_end','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
case('<='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_end','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_end','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_end','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->where('date_end','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else{
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Pick Up')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
}
|
|
|
|
|
|
|
|
|
|
return view('reservations.pickups')
|
|
->with('search_types',$search_types)
|
|
->with('data',$loans)
|
|
->with('reservations',$reservations)
|
|
->with('data_name','pickup')
|
|
->with('data_names','pickups')
|
|
;
|
|
}
|
|
|
|
public function setups(Request $request){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_setup'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$search_types = [];
|
|
array_push($search_types,array("value" => "username", "name" => "user"));
|
|
array_push($search_types,array("value" => "room", "name" => "room"));
|
|
array_push($search_types,array("value" => "start", "name" => "date_start"));
|
|
array_push($search_types,array("value" => "end", "name" => "date_end"));
|
|
|
|
|
|
$PerPagination = $request->input('p') ?? 10;
|
|
$search_term = $request->input('search_term');
|
|
$search_type = $request->input('search_type');
|
|
$search_compare = $request->input('search_compare');
|
|
|
|
if($search_term != ""){
|
|
switch ($search_type) {
|
|
case('username'):
|
|
switch ($search_compare) {
|
|
case('='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','=',$search_term);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','=',$search_term);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','like','%'.$search_term.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','like','%'.$search_term.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
|
|
}
|
|
break;
|
|
case('room'):
|
|
$parts = explode('.',$search_term);
|
|
$total_parts = count($parts);
|
|
if($total_parts == 1){
|
|
$room = $search_term;
|
|
}
|
|
else{
|
|
$room = $parts[1];
|
|
}
|
|
switch($search_compare){
|
|
case('='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','=',$room);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','=',$room);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','like','%'.$room.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','like','%'.$room.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
case('start'):
|
|
$parts = explode('.',$search_term);
|
|
$d = $parts[0];
|
|
$m = $parts[1];
|
|
$y = $parts[2];
|
|
$constructed_date = $y."-".$m."-".$d;
|
|
switch($search_compare){
|
|
case('>='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_start','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_start','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
case('<='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_start','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_start','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_start','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_start','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
case('end'):
|
|
$parts = explode('.',$search_term);
|
|
$d = $parts[0];
|
|
$m = $parts[1];
|
|
$y = $parts[2];
|
|
$constructed_date = $y."-".$m."-".$d;
|
|
switch($search_compare){
|
|
case('>='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_end','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_end','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
case('<='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_end','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_end','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_end','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->where('date_end','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else{
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Set Up')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','loanable_type','loanable_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
}
|
|
|
|
return view('reservations.setups')
|
|
->with('search_types',$search_types)
|
|
->with('data',$loans)
|
|
->with('reservations',$reservations)
|
|
->with('data_name','setup')
|
|
->with('data_names','setups')
|
|
;
|
|
}
|
|
|
|
public function validations(Request $request){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_validate'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$search_types = [];
|
|
array_push($search_types,array("value" => "username", "name" => "user"));
|
|
array_push($search_types,array("value" => "room", "name" => "room"));
|
|
array_push($search_types,array("value" => "start", "name" => "date_start"));
|
|
array_push($search_types,array("value" => "end", "name" => "date_end"));
|
|
|
|
$PerPagination = $request->input('p') ?? 10;
|
|
$search_term = $request->input('search_term');
|
|
$search_type = $request->input('search_type');
|
|
$search_compare = $request->input('search_compare');
|
|
|
|
if($search_term != ""){
|
|
switch ($search_type){
|
|
case('username'):
|
|
switch($search_compare){
|
|
case('='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','=',$search_term);
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->where(function ($query) use ($search_term){
|
|
$query->whereHas('user',function ($query) use ($search_term){
|
|
$query->where('username','like','%'.$search_term.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
|
|
break;
|
|
case('room'):
|
|
$parts = explode('.',$search_term);
|
|
$total_parts = count($parts);
|
|
if($total_parts == 1){
|
|
$room = $search_term;
|
|
}
|
|
else{
|
|
$room = $parts[1];
|
|
}
|
|
switch($search_compare){
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->where(function ($query) use ($room){
|
|
$query->whereHas('room',function ($query) use ($room){
|
|
$query->where('name','like','%'.$room.'%');
|
|
});
|
|
})
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
case('start'):
|
|
$parts = explode('.',$search_term);
|
|
$d = $parts[0];
|
|
$m = $parts[1];
|
|
$y = $parts[2];
|
|
$constructed_date = $y."-".$m."-".$d;
|
|
switch($search_compare){
|
|
case('>='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->where('date_start','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
case('<='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->where('date_start','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->where('date_start','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
case('end'):
|
|
$parts = explode('.',$search_term);
|
|
$d = $parts[0];
|
|
$m = $parts[1];
|
|
$y = $parts[2];
|
|
$constructed_date = $y."-".$m."-".$d;
|
|
switch($search_compare){
|
|
case('>='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->where('date_end','>=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
case('<='):
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->where('date_end','<=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->where('date_end','=',$constructed_date)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
break;
|
|
}
|
|
}
|
|
else{
|
|
$loans = Loan::where('loan_type_id','=',LoanType::where('name','=','Reservation - Awaiting')->first()->id)
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->groupBy('user_id','date_start','date_end')
|
|
->Paginate($PerPagination)
|
|
;
|
|
}
|
|
|
|
return view('reservations.validations')
|
|
->with('search_types',$search_types)
|
|
->with('data',$loans)
|
|
->with('data_name','validation')
|
|
->with('data_names','validations')
|
|
;
|
|
}
|
|
|
|
|
|
public function create(){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_create'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$cabels = Cabel::all();
|
|
$cabels_valid = [];
|
|
foreach($cabels as $cabel){
|
|
$available = $cabel->total - (count($cabel->loans) + count($cabel->reservations));
|
|
if($available >= 1){
|
|
array_push($cabels_valid,$cabel);
|
|
}
|
|
}
|
|
|
|
$products = Product::all();
|
|
$products_valid = [];
|
|
foreach($products as $product){
|
|
$available = $product->total - (count($product->loans) + count($product->reservations));
|
|
if($available >= 1){
|
|
array_push($products_valid,$product);
|
|
}
|
|
}
|
|
|
|
return view('reservations.create')
|
|
->with('cabels', $cabels_valid)
|
|
->with('products', $products_valid)
|
|
->with('users', User::all())
|
|
->with('rooms', Room::all())
|
|
;
|
|
}
|
|
|
|
|
|
public function store(Request $request){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_create'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$user = User::where('username','=',$request->user)->first();
|
|
$room = Room::where('id','=',$request->room_id)->first();
|
|
$loan_type = LoanType::where('name','=','Reservation - Awaiting')->first();
|
|
$date_start = $request->date_start;
|
|
$date_end = $request->date_end;
|
|
$date_current = new DateTime();;
|
|
|
|
$deadline = new Carbon($date_start);
|
|
$deadline = $deadline->subWeekdays(1);
|
|
$deadline->setHour(8);
|
|
$deadline->setMinutes(15);
|
|
|
|
$cabels = [];
|
|
$products = [];
|
|
|
|
if(isset($request->products)){
|
|
foreach($request->products as $key => $value){
|
|
$product = Product::where('id','=',$request->product_id[$key])->first();
|
|
for($i = 1; $i <= $request->product_amount[$key];$i++){
|
|
$user->loans()->create([
|
|
'loanable_id' => $request->product_id[$key],
|
|
'loanable_type' => get_class($product),
|
|
'loan_type_id' => $loan_type->id,
|
|
'room_id' => $room->id,
|
|
'date_start' => $date_start,
|
|
'date_end' => $date_end,
|
|
'date_deadline' => $deadline
|
|
]);
|
|
}
|
|
Logger::LogReserved($product->id,get_class($product),$request->product_amount[$key],$user->id);
|
|
$item = [$product,$request->product_amount[$key]];
|
|
array_push($products,$item);
|
|
}
|
|
|
|
}
|
|
else{
|
|
$products = Null;
|
|
}
|
|
|
|
if(isset($request->cabels)){
|
|
foreach($request->cabels as $key => $value){
|
|
$cabel = Cabel::where('id','=',$request->cabel_id[$key])->first();
|
|
for($i = 1; $i <= $request->cabel_amount[$key];$i++){
|
|
|
|
$user->loans()->create([
|
|
'loanable_id' => $request->cabel_id[$key],
|
|
'loanable_type' => get_class($cabel),
|
|
'loan_type_id' => $loan_type->id,
|
|
'room_id' => $room->id,
|
|
'date_start' => $date_start,
|
|
'date_end' => $date_end,
|
|
'date_deadline' => $deadline
|
|
]);
|
|
}
|
|
Logger::LogReserved($cabel->id,get_class($cabel),$request->cabel_amount[$key],$user->id);
|
|
$item = [$cabel,$request->cabel_amount[$key]];
|
|
array_push($cabels,$item);
|
|
}
|
|
}
|
|
else{
|
|
$cabels = Null;
|
|
}
|
|
|
|
// Send Mail
|
|
if($user->role->name == 'Underviser')
|
|
{
|
|
$email_sufix = "@sde.dk";
|
|
}
|
|
else
|
|
{
|
|
$email_sufix = "@edu.sde.dk";
|
|
}
|
|
|
|
$email = $user->username.$email_sufix;
|
|
$logo = "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";
|
|
|
|
$mj = new Client(config('app.mail_username'), config('app.mail_password'),true);
|
|
|
|
$body = [
|
|
'FromEmail' => config('app.mail_from_address'),
|
|
'FromName' => config('app.mail_from_name'),
|
|
'Subject' => "Reservation - Validering",
|
|
'Html-part' => view('emails.reservation')
|
|
->with('logo',$logo)
|
|
->with('user',$user)
|
|
->with('room',$room)
|
|
->with('date',$date_current)
|
|
->with('deadline',$deadline)
|
|
->with('products',$products)
|
|
->with('cabels',$cabels)
|
|
->render(),
|
|
'Recipients' => [
|
|
[
|
|
'Email' => $email
|
|
]
|
|
],
|
|
'Inline_attachments' => [
|
|
[
|
|
'Content-type' => "image/png",
|
|
'Filename' => "logo.png",
|
|
'content' => $logo
|
|
]
|
|
]
|
|
];
|
|
|
|
// All resources are located in the Resources class
|
|
|
|
$response = $mj->post(Resources::$Email,['body' => $body]);
|
|
|
|
return redirect()->route('reservations.index');
|
|
}
|
|
|
|
public function cancel(Request $request,$reservation){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_cancel'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$reservation_obj = Loan::where('id','=',$request->reservation)->first();
|
|
$loan_type = LoanType::where('name','=','Reservation - Awaiting')->first();
|
|
$user = User::where('id','=',$reservation_obj->user->id)->first();
|
|
$room = Room::where('id','=',$reservation_obj->room->id)->first();
|
|
$date_start = $reservation_obj->date_start;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',$loan_type->id)
|
|
->where('user_id','=',$user->id)
|
|
->where('room_id','=',$room->id)
|
|
->where('date_start','=',$date_start)
|
|
->get()
|
|
;
|
|
|
|
foreach($reservations as $loan){
|
|
$loan->delete();
|
|
}
|
|
|
|
return redirect()->route('reservations.validations');
|
|
}
|
|
|
|
|
|
public function validate_page(Request $request,$reservation){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_validate'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$reservation_obj = Loan::where('id','=',$reservation)->first();
|
|
$loan_type = LoanType::where('name','=','Reservation - Awaiting')->first();
|
|
$user = User::where('id','=',$reservation_obj->user->id)->first();
|
|
$room = Room::where('id','=',$reservation_obj->room->id)->first();
|
|
$date_start = $reservation_obj->date_start;
|
|
$date_end = $reservation_obj->date_end;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',$loan_type->id)
|
|
->where('user_id','=',$user->id)
|
|
->where('room_id','=',$room->id)
|
|
->where('date_start','=',$date_start)
|
|
->where('date_end','=',$date_end)
|
|
->groupBy('loanable_type','loanable_id')
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->get()
|
|
;
|
|
|
|
return view('reservations.validate')
|
|
->with('data',$reservation_obj)
|
|
->with('user',$user)
|
|
->with('room',$room)
|
|
->with('reservations',$reservations)
|
|
;
|
|
}
|
|
|
|
public function validate_action(Request $request, $reservation){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_validate'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$reservation_obj = Loan::where('id','=',$reservation)->first();
|
|
$loan_type = LoanType::where('name','=','Reservation - Awaiting')->first();
|
|
$user = User::where('id','=',$reservation_obj->user->id)->first();
|
|
$room = Room::where('id','=',$reservation_obj->room->id)->first();
|
|
$date_start = $reservation_obj->date_start;
|
|
$date_end = $reservation_obj->date_end;
|
|
$deadline = $reservation_obj->date_deadline;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',$loan_type->id)
|
|
->where('user_id','=',$user->id)
|
|
->where('room_id','=',$room->id)
|
|
->where('date_start','=',$date_start)
|
|
->where('date_end','=',$date_end)
|
|
->groupBy('loanable_type','loanable_id')
|
|
->select('*',DB::raw('count(loanable_id) as amount'))
|
|
->get()
|
|
;
|
|
|
|
$loan_products = [];
|
|
$loan_cabels = [];
|
|
$products_total_amount = 0;
|
|
$cabels_total_amount = 0;
|
|
|
|
$loan_type_new = LoanType::where('name','=','Reservation - Set Up')->first();
|
|
|
|
$total = 0;
|
|
foreach($reservations as $reservation){
|
|
switch($reservation->loanable_type){
|
|
case('App\Models\Product'):
|
|
$product = Product::where('id','=',$reservation->loanable_id)->first();
|
|
$loan_selection = Loan::where('user_id','=',$user->id)
|
|
->where('loan_type_id','=',$loan_type->id)
|
|
->where('loanable_type','=',get_class($product))
|
|
->where('loanable_id','=',$product->id)
|
|
->limit($reservation->amount)
|
|
->get()
|
|
;
|
|
|
|
foreach($loan_selection as $loan){
|
|
$loan->loan_type_id = $loan_type_new->id;
|
|
$loan->save();
|
|
$total += 1;
|
|
}
|
|
|
|
array_push($loan_products,$reservation);
|
|
$products_total_amount += 1;
|
|
break;
|
|
case('App\Models\Cabel'):
|
|
$product = Cabel::where('id','=',$reservation->loanable_id)->first();
|
|
$loan_selection = Loan::where('user_id','=',$user->id)
|
|
->where('loan_type_id','=',$loan_type->id)
|
|
->where('loanable_type','=',get_class($product))
|
|
->where('loanable_id','=',$product->id)
|
|
->limit($reservation->amount)
|
|
->get()
|
|
;
|
|
|
|
foreach($loan_selection as $loan){
|
|
$loan->loan_type_id = $loan_type_new->id;
|
|
$loan->save();
|
|
$total += 1;
|
|
}
|
|
|
|
array_push($loan_cabels,$reservation);
|
|
$cabels_total_amount += 1;
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
Logger::LogValidated($reservation_obj->id,get_class($reservation_obj),$user->id,$total);
|
|
|
|
// Generate the PDF
|
|
// Data for the PDF
|
|
$logo = "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";
|
|
$loaner_signature = $request->loanerSigRawData;
|
|
$lender_signature = $request->lenderSigRawData;
|
|
$date = new DateTime();
|
|
$timestamp = $date->getTimestamp();
|
|
$user_id = $user->id;
|
|
|
|
// Set the PDF File data
|
|
$pdf_file_name = $user->username."_".$timestamp;
|
|
$pdf_file_extension = '.pdf';
|
|
$pdf_file = $pdf_file_name.$pdf_file_extension;
|
|
|
|
// Create the PDF by putting data into the pdf view
|
|
$pdf = PDF::loadView('pdf.reservation',['date_start' => $date_start,'date_end' => $date_end,'loaner' => $loaner_signature, 'lender' => $lender_signature,'user' => $user,'cabels' => $loan_cabels,'cabels_total_amount' => $cabels_total_amount,'products' => $loan_products,'products_total_amount' => $products_total_amount,'room' => $room]);
|
|
|
|
// Store the PDF file on the server
|
|
$location = "reservations/";
|
|
$file_name = $location.$pdf_file;
|
|
$file_put = Storage::put($file_name, $pdf->output());
|
|
$file_path = storage_path($file_name);
|
|
$file = Storage::files($file_path);
|
|
|
|
// Create the Contract
|
|
$contract = new Contract();
|
|
$contract->user_id = $user->id;
|
|
$contract->timestamp = $timestamp;
|
|
$contract->type = "reservations";
|
|
$contract->save();
|
|
|
|
// Send Mail
|
|
if($user->role->name == 'Underviser')
|
|
{
|
|
$email_sufix = "@sde.dk";
|
|
}
|
|
else
|
|
{
|
|
$email_sufix = "@edu.sde.dk";
|
|
}
|
|
|
|
$email = $user->username.$email_sufix;
|
|
|
|
$mj = new Client(config('app.mail_username'), config('app.mail_password'),true);
|
|
|
|
$body = [
|
|
'FromEmail' => config('app.mail_from_address'),
|
|
'FromName' => config('app.mail_from_name'),
|
|
'Subject' => "Reservation - Validering",
|
|
'Html-part' => view('emails.validation')
|
|
->with('logo',$logo)
|
|
->with('user',$user)
|
|
->with('date',$date)
|
|
->with('deadline',$deadline)
|
|
->render(),
|
|
'Recipients' => [
|
|
[
|
|
'Email' => $email
|
|
]
|
|
],
|
|
'Attachments' => [
|
|
[
|
|
'Content-type' => "application/pdf",
|
|
'Filename' => 'contract.pdf',
|
|
'content' => base64_encode($pdf->output())
|
|
]
|
|
],
|
|
'Inline_attachments' => [
|
|
[
|
|
'Content-type' => "image/png",
|
|
'Filename' => "logo.png",
|
|
'content' => $logo
|
|
]
|
|
]
|
|
];
|
|
|
|
// All resources are located in the Resources class
|
|
|
|
$response = $mj->post(Resources::$Email,['body' => $body]);
|
|
|
|
return redirect()->route('reservations.validations');
|
|
|
|
}
|
|
|
|
public function setup(Request $request, $reservation){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_setup'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$reservation_obj = Loan::where('id','=',$reservation)->first();
|
|
$loan_type = LoanType::where('name','=','Reservation - Set Up')->first();
|
|
$user = User::where('id','=',$reservation_obj->user->id)->first();
|
|
$room = Room::where('id','=',$reservation_obj->room->id)->first();
|
|
$date_start = $reservation_obj->date_start;
|
|
$date_end = $reservation_obj->date_end;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',$loan_type->id)
|
|
->where('user_id','=',$user->id)
|
|
->where('room_id','=',$room->id)
|
|
->where('date_start','=',$date_start)
|
|
->where('date_end','=',$date_end)
|
|
->get()
|
|
;
|
|
|
|
$loan_type_new = LoanType::where('name','=','Reservation - Pick Up')->first();
|
|
|
|
$total = 0;
|
|
foreach($reservations as $loan){
|
|
$loan->loan_type_id = $loan_type_new->id;
|
|
$loan->save();
|
|
$total += 1;
|
|
}
|
|
Logger::LogSetup($reservation_obj->id,get_class($reservation_obj),$total);
|
|
|
|
return redirect()->route('reservations.setups');
|
|
}
|
|
|
|
public function pickup(Request $request, $reservation){
|
|
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'reservations_return'))
|
|
? Response::allow()
|
|
: Response::deny('you are not the chosen one');
|
|
|
|
$reservation_obj = Loan::where('id','=',$reservation)->first();
|
|
$loan_type = LoanType::where('name','=','Reservation - Pick Up')->first();
|
|
$user = User::where('id','=',$reservation_obj->user->id)->first();
|
|
$room = Room::where('id','=',$reservation_obj->room->id)->first();
|
|
$date_start = $reservation_obj->date_start;
|
|
$date_end = $reservation_obj->date_end;
|
|
|
|
$reservations = Loan::where('loan_type_id','=',$loan_type->id)
|
|
->where('user_id','=',$user->id)
|
|
->where('room_id','=',$room->id)
|
|
->where('date_start','=',$date_start)
|
|
->where('date_end','=',$date_end)
|
|
->get()
|
|
;
|
|
|
|
$total = 0;
|
|
foreach($reservations as $loan){
|
|
$loan->delete();
|
|
$total += 1;
|
|
}
|
|
|
|
Logger::LogPickup($reservation_obj->id,get_class($reservation_obj),$total);
|
|
|
|
return redirect()->route('reservations.pickups');
|
|
}
|
|
}
|