Lager-v3/app/Http/Controllers/Loan/LoanController.php

851 lines
50 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\Note;
use App\Models\NoteType;
use App\Models\Permission;
use App\Models\Product;
use App\Models\ProductCategory;
use App\Models\User;
use Barryvdh\DomPDF\Facade\Pdf;
use DateTime;
use Illuminate\Auth\Access\Response;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Storage;
use Mailjet\Client;
use Mailjet\Resources;
class LoanController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function index(Request $request)
{
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_viewAny'))
? Response::allow()
: Response::deny('you are not the chosen one');
$search_types = [];
array_push($search_types,array("value" => "username", "name" => "username"));
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_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)
;
$loans_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:
$loans_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)
;
$loans_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('start'):
$parts = explode('.',$search_term);
$d = $parts[0];
$m = $parts[1];
$y = $parts[2];
$constructed_date = $y."-".$m."-".$d;
switch($search_compare){
case('>='):
$loans_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)
;
$loans_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('<='):
$loans_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)
;
$loans_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('='):
$loans_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)
;
$loans_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:
$loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id)
->where('date_start','like','%'.$constructed_date.'%')
->select('*',DB::raw('count(loanable_id) as amount'))
->groupBy('user_id','date_start','date_end')
->Paginate($PerPagination)
;
$loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id)
->where('date_start','like','%'.$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_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)
;
$loans_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('<='):
$loans_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)
;
$loans_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('='):
$loans_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)
;
$loans_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:
$loans_display = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id)
->where('date_start','like','%'.$constructed_date.'%')
->select('*',DB::raw('count(loanable_id) as amount'))
->groupBy('user_id','date_start','date_end')
->Paginate($PerPagination)
;
$loans_track = Loan::where('loan_type_id','=',LoanType::where('name','=','Loan')->first()->id)
->where('date_start','like','%'.$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:
$loans_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)
;
$loans_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{
$loans_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)
;
$loans_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('loans.index')
->with('search_types',$search_types)
->with('data',$loans_display)
->with('loans',$loans_track)
->with('data_name','loan')
->with('data_names','loans')
;
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function create()
{
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_create_user'))
? 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('loans.create')
->with('cabels', $cabels_valid)
->with('products', $products_valid)
->with('users', User::all())
->with('date_start_locked','true')
;
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function store(Request $request)
{
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_create_user'))
? Response::allow()
: Response::deny('you are not the chosen one');
$user = User::where('username','=',$request->user)->first();
$now = date('Y-m-d');
$loan_type = LoanType::where('name','=','Loan')->first();
$date_start = $request->date_start;
$date_end = $request->date_end;
$loan_products = [];
$loan_cabels = [];
$products_total_amount = 0;
$cabels_total_amount = 0;
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,
'date_start' => $now,
'date_end' => $date_end
]);
$products_total_amount += 1;
}
Logger::LogLent($product->id,get_class($product),$request->product_amount[$key],$user->id);
$item = [$product,$request->product_amount[$key]];
array_push($loan_products,$item);
}
}
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,
'date_start' => $now,
'date_end' => $date_end
]);
$cabels_total_amount += 1;
}
Logger::LogLent($cabel->id,get_class($cabel),$request->cabel_amount[$key],$user->id);
$item = [$cabel,$request->cabel_amount[$key]];
array_push($loan_cabels,$item);
}
}
// Generate the PDF
$logo = "iVBORw0KGgoAAAANSUhEUgAAAa8AAAB1CAMAAADOZ57OAAAAt1BMVEX///+AgoQAeIp6fH59f4HP0NF3eXvIycmChIYAcoWGiIrf3+D8/Pz5+fnl5uYAcYSbnZ6vsLG9vr/v8PCSk5XX2Nje3t++v8CoqquPkZLl5eWXmZrs7e1zdXe1trcAbIDt9fbh7vCio6U3jZyQvMXG3eGvz9UlhZXS5OiBs71Ynamgxs1Dk6G92N17sLpsqLOYwckOgJFknqp0pbDa5um60NZRlaOTt79lrbiHvcYAZHmn0Nd4tL0vlxF5AAAVwUlEQVR4nO1dCZujOA6FmBBCIBch90GSrtQ9VdXb27Mzvf//d62NJVs2hKR6ZzrJLu+bb7owh40fkmVJdhznUzi87B+3n7ulxuXw1ms32o3XSzejxnk49BoC99mlG1LjHGT3OV2N3t2lW1LjHHxpS742tUK8BWQNRG1x3ALeQLx6j5duSY0zsN2AdH1kUPD49Fs9kl0tXoCuzbM8fmi02+3Nl8s2qsYxvKJ47eVxJI3FTS1hV4lobxmHYCy2f7tsu2qU47kH4vUijzOgr/31su2qUQqcKjd6D7LgNzQW3y/bsBql+NIzxUkZi43sou2qUYqtPVV+QvECY3H71Gu/Xc80Oo4LRckFmvH34PD00di/V3a2miqD+X6n5mLyOGvwC9qoK48gak5ns8WgowriVrMZ0SuazdZS/pU2c6TzYjfjqU4FA+tWoWjaLF62bDa79Dhp9Wez/nBJi5rNuT7q8BZemPhs38v7ulExEN0BXeiZV8ZiD4xF4HNfVdE4ZB4HYzv18Y/81YRckfp+KHsjWvgshxfMJlYH9fGUO5ssnVLEYVgoG7C0UNZcrSixE1e20B2SVq9Wa32955OjywA1W6P9VlQigBek5yCP0Vhsg7H4AMebinpS3hHBoj/jXbLAirq+GxI2Qo+BEER9z/UF+NUsnBhCuPNchqeCYWmbW4x17LIBcwuENRlr0St4Xf0+/6yYJqXj64Mmr3HoXBho6HE23o5ccsBLXmTHKWOxDQoQOd9ER57AP3nmsukyiuJ05rEBlk7J37yXvT48gPPlL7vd7rg1Fd3XpyK287wmP9eRpxYlIhaPPG9nFw645MytMoOvJnPdVhxFSct1V4pawlfKroAux7lXhLWfy6/4QELBl6GMRSBYuT5ejtcyZNiFyzBQnZS4rurE2HWVVHC+VnjJMOCfPSGM8wWDTjwJPC8sEpbynvftYWbguZ7bNcsMvmaeBwepP1MXar74U6+BLuehoZGVXfBs2/KWsRjbo1kZhMDAnx3Sw5zGPvy5Zt4UiwlfXGvynhzpWzRfnHsuSWFBJXJlWuxazpfrBSa5lK+EV4LqIdV6QvHF6fKvgS4ygjXaZd7bGE9vwIS0jUV7NCtDFHphmbLk5WAH8LFMy4TBl7MMqCKifHHLwmNTx8Sca8OZF1jVDbjpwrzQEDvKF7/LfpAA8sW1pWEbXRAPiq9Gu+Q0DnDoKXywjMUM1WW7ypznglBqGvBBQdpyfY/p/jD5crqMcGnwxbl0V5ZGFBdMDEtCgI9f851FGOWr6ylJpwC+OF1+cY5wGUQvii80AAm2yn7MZMHeulbxecxcyTGgdFAAT5y3gDTJ5IvrSi1gJl/OhHkDeqmzdL2FE/tau2EDvI7DCZsRwozxK/DcglGJfAnL8FrooiZiSZ+j9mvD/OxVaT/ZH2r4+6iccXdXfEgp04hzbp7HwqRjZEJr80W73+IrDizVx7lt5pbn2Kgn5yvqG4QZfPGhNCxO0XK+OF3e9dClKBCwu1RNlcGT4SjHLxiLT9Zodgy8O9ioWaITB4zb9FxKFqTM5stZeAy72eKLM+PT48jzZryWDrNM+pwvJxaEqUYYfAkuvZ1t8nO+hlz2r4kurfKK4UelK9v2VPlJHtuuj+MQxjebTQqMJYHL0jDvTV2tzdeE+Xje5qvFqGSKw1zxzizrXfLlxAumRdWcL8dTMQXvp8Yn2/G9BTcsr4kuPf8tWogHO+yliAXtt7dcHxXo7jxW5pJoMT4zMq28Er5Uz9p8NZkxMoaem8inMsN1BHw5Cde8OC1vWlZJOuKM+SNKf8cXjbsOQx6R7TVfZvhRezJA7h6tqfLBGs2q0eW6z2WhPazzLnYDw9Au8JUe52vsU75SH8xyPq4ZtiDylU8BwBK0+eIPW/icsYX+pMY+ly43vCrvfvRdK0RTrRXCXraxeEyPHkM8ETrHGtZ5n1j9ViZf+NWX6EPCV1+NZmuTDMVXTpgc24p8cfNSaEVXEcbly+3b87ZL46vmq5eR8kKGKF6IavOLNZqdgXjH1Z/19qHdHwW+hsxHc69y/Or6yszgs2zqpdd8OQkSVsYX/3xmZCrGx6+1s6BGyhXgH0cMDjtDVBsXsvXKM9X7TKhyV3CbnuZrpt1ZNl87z9dGHWelvwaELhVkwpezBK9IOV9iDq5MztyeFw7kxRURRvjqEZ8vhklUhqhtLNquj/PQ5Ra3WXKSr4RbaUfmX4lHPF2Jy0cbxjBARucIlC+nG+aBgSN8cWlWKlbOl5NZuffjQngkHimSbI3DGnKo4yryWDuyss/UFvOXN0tO8jX1jvo31oyEZIbMDUIF12XaVWXw5XQCz18f5Wusgyjgj+qW+CkvB8rXP1SpCvrfy+PINhafLNdHBeJUjzGcr8A8e4qvDnO1BWDyNXddpSmFJeEtEwXDVWXy5XT4fRPDP9/ST+0U+HLG/PpLh5YVnomD47tSLkcyRJWxqNwi9ydt+YT5OiKSuDQ8InCCr6VLna0GX8J00N3YYoaPPeYzcdU0iy9nzGcWC+0VbK6I+72ledTxFJ8TfPwNfykoX/sMC60oZIYXtaVxEX1iqhyNiFGwZrbrt5ovrrsYGTwoX0JNEe5nVgiZ1mTz5YxXYiaMvCQrYgKOvBW2R4tac3U1LnrqQMQJmJqUYdaTbSy+oy3//Ywamr6ipOmBB0Kjiq/lmhl0Eb6S3CephTs1nZD8Xl/bIgW+hMSQed8OJ2V8tCS+R6IaW3yaWJJkdQHcEb5wqoWuDfRk2Bmiam5WGfZS4FOYUHh7l+uS0EQZX3533knTYd/lnEypwhX5G+LUpB8wz98RM3tRmInzx2BJkS8R1DLiy15/Hjtxp8//UkMizbcZ8Jlj0YN/ASjLgvAVoTVxJEP0vLCXQiKy2cLRLChLWinjS1jmPhPekJn5Ue/0KT+kzM/5PMEaSVNfmeElfDkt+umkARf82YLrVM/VoRjKlwifBWaU5jLICF+bb1AolSSGSZTKhLjKVonkmVPleOCKLuZ9XNQpgR9YfC18mc7mhn07BtOXp7iq65u5m7tVMWLv+Stgabryi13doiNSd5E3kHEx04VG/mHE62Z2xOUCKOXLOTR6PZSeSKUggrH4ZI1mTvaQnailO9mNFruyEFhn3LEEYz7O0ekW/XZHT/HCwrO74/FS/VVS85AyHI3Xu9lubdAaqwfA0fga+CLqkFh72T//iWOTiqtACu+DPZp97W3O1IzXhavy456LI3yRC+wM0RdrNNsLPnsVCVI1/kLE+xN8Heywl+X6gAlcvTHHr4EanRpHFuAph5U0LvTqPUlQXHVvjb8eJADW/qPkPMhXzw57gQLEqHPvxy9r8f83Hk/wleVJ9m3wfWwxQ7QhR7NC1LnG34z3E3w53/a9du/DWruMo9mbFXWu8XeDz4bfKvlyssOXQyb/1Ask5GimUxTPybmp8Rcg27TfP0yhOQ5ly4M4oWO4fdpPX+MvwkfvGbr9pLtdJW3AaGZPpWv8Ajz1fv9326DhKFD9baQ4FVIU/ycRL7vdssXSyXK+/AkXSTwfN9POkdXX5+D3ze/o0a1adSeAzhDIEEVT5URKW5y2TKAbrknKzDeQZTqAMZcFons69jn9oDzp2qxKenwjWpN2Ci6hhD5qbD0+3YWBGwRhv2U0MG4tRHk4G6SKs6bxNFWnueVAPxRZQV4QTs2QQWJ2jazbfBcoPWxe0Iw4mUsoZ18gTtqV9a3qnhgX/MtF/+L/4GmlJ1jY1xREeaKTr0OVk5UoWIm36cib6KLXOD8rT89X5JlsJeM38ay0JryP9Fwkr8S9A+IdEyGcPPUq2OnrxjMoF2vih9CUUX6rC5bXUFa5IlG6aBLi4/iN3oJ6l8eyXiPKYPQPY1C63fR+7M81ON7v272GFQY7sYlly3c1glC0FUJefY+ccWlsMsgL9CqTFhMFMq9gkd9F8wrkWRlg7tLa8Kp4ZNbkQy7OOi+miR/j/HZcaJvMGLlNJ92kHnmet4KYt2wYRLVTeSfNXeyO6NPECw/0yY58K0PWzf5xsbjX/gLTqDPc7NndHUS9tnaK4hGsaStzvlxYPmK1x9Wx/yq+mpIdnQwQSTZkwP4cvviTJGFd2TSmu20qHyXFMtoZHawCq4nJPtJN+UrgHAnuGSTjC+vk7/P5eup9lU5bLjrVXW9AhcFOeA7Tlc0Xprf0Uadgu1QEv4qvOMwvV4uM8jx30VH5QSVfpCapixZWLy3leVibnsKzxIBDl7FP4SkixunqNbmUL6iQLE9LTeGCJ6io+Cf4OvTu8wHs42H7mFX3PYGdongc65VvYBV0aHvCwWDkQ3+igFXx5UykgCktNqUKEvhiUBWMX7L7wrWuaUc6Ucvq0Hj0Dq4dtIZ9pjeWiGUVXjBp8efpXFLCF+gUXw/JywA7n+UbvuABvnEFX9hvWLxt9x7EDOxTmfCFFMUKRDqPMxE5nUZ7cmGLoWt86LhKvpJACgE8B1QPdOc870w2hOqkIEu+8gEugU6Ay2eGrMbykEmpSGbyyXLtWF+JlxQ7SKRM9SYgmq8mfDTG4hkgKByOk2U6QEn3IUXiOF8Bdp0qv+89i4RQmj9/EvZqvp+B5kvkd+ath5ev5MsUKBQ3MCGkfFlZjoQvJ5EjKKRrm7IK4gbf/DIwZN5qDHatdsQpvrpADVkMj9pQLeRe9qEE8p0r+Cr022Pvq0hr+0xQv7CJ5c+A8AUvi4xU89WhWgx0HSYmnuQLa5J8AXsBNVjxk4duD62dcVBpLqxi5AtbxHbEpwr6gyYxokqROvMzfN217/M0RJXfexo/sfqrCMrXiPbiCb5kypsrdwEYGzKBfJlpjgZfZk0D0k8gULhrDvDlhS0zW6cFprpIWaRAvqayRXT3CFDhxjLdKKSzic/wlX207/LOr5z3UhQ2saxCBNsWKqDGJ3x14fuj45c7m0yGOSY7Q/pgfJB8wikc2edwSt45KYxfTkeSghnYcyKrUnCUbMYwfrl8qtwkna/NxtE6NXJWZaPBxqRiOYYyg2A5MXGliVjBF/QCmV0/9d6ezrDMNVTY64zfe4ioc8FzhW+iRdojei5K4VtDiQqgo/RtBl+x1mJLs/vRPoSVYK78NICvkfASGV+16pR8uzH5VF91Ktrt+eOmqv8jNWUQKZV6Db3kC+xAcwuQljHGAnAkzR9QYR/KV6E7WHFt+C/BwDnp8AJq9deJqXKOYdG/Yc6/wtCHsRc9BciXBb1uYqiG/IkpE9b8K6R8ifVhK6hJT4xAVqfK2tDejq4yu0W57rAJrYMF2KoFudpSyJbkAuj3cXL+RVOjs33v+eNM7SZgp7RVYkBrlf4NmI/a/g3dI6f4StQUWb6z3qCqii8NsreollWwNoge63jl/qiBbxAJzaJ8WdZIOV+zn+XLeWw8CWf7GcuDBF5RG+7PiSqX+A9Hhnxhgzz9OsCXp2DxBaMW68iBgSiac/hixh4oKKsxnVYBkoFLqNH52J0d07KH63WBL1BixpJM0Ifmqr/4p+XL+favR+EOrNoWj8BKaTuBaOBp3wbjf7PZvKQ9xma9kq9wihiZ9obyyw6mtkzg+AWJ9mV8zczc+wQsDtCsVop/nE7RF29MqJatXYDCB9NtsDfQdDe2JwaT0Xh0B4aDU3yBq8awLR+zQ25DlFmI8fv3ly+ZPrb3JTqJpQVUXuCPCqkoSFTb8wLSbAjgA9flki9vDVXJLx/9UfCPFSwEswK+kZL3H6Oj0zyZtEKgRvYy2PPKWUlCdEtbQAXkQAEzkQr7UL6JuWbgkP0hjIiyNKf4adNu9z7esZcxQ/S/mirr9niLpmz3iBi7p/lqkZGFLv2qnH/BZ74w1XiHqNAjO/+BP9AmMwH/lfz0cf7Vha+IWvQz4IbUjMEBWeNn5l8c2evDnQiCfRRPweLY3j0MbvYWvj8PtOflBJNq/NN8xcQkoW9U5d8Y4bBnLfcPtbY0FzepLyimIQCyUgJcUwZfEU6s6EYrQ3AAa6WWQK0QeP0kX84P5w+h59rFIem7kqe9iCurDNFNVvqgTwD5gr6nG0ie5EuseCyTiWr/RgzdZg5SWlatfWH7eLiUWhbGn0Ttoa3nFQ7194I4krW8S5xR7oDrMdCFjpnP8pXd3b1zuooWB9kRrLH5/lDYwvcM0DyEJv8P9YSaL4M/W/NxBl/dcpkA/8YglTDmywtFjbFtohNpU8/Mn+DmUb5mLV4YZuiU+f3cxEhd2m4STwFTkRgoGLX1/F0zTScz1MEYPet4Rru7qn/cAIqs5bhcwJ56f3xsClMwkmDP+XzCP0s0ZzniGbP8G8z2b6hIEyqQM/hS1qXpNTD9Gz6Nf+VmCfS8uSeU6kzTFy+uZe5i2of5BIyTQtjEzwtMZ9ACcDgSvmJgQ6/hjPFi2TQ80Jt9eEa71+QNrfwNwPbu9f1j/+PPwhT4W4MQpv4+P0N0Upx/0fyNvOsSdKHCPefwhSEKUyYq4ss5XxjrMBQfyqpvZl1BozBUheoQPy4VwsL0Ic2XsmH0j010ySip26c3IzBniJQvhNWvP6LHx/a396Kae9jTPQQA52eIDoglV+LfkJ/6BDQ+TArP4QsDKaZMnOILR37TIumXSF1kdbDnSZfg2KiBRKeNfBt4IfKbBvOgQBj5PZnP8/WwfT3cvztZscfj54+2RVeJXXIMJ/wbRvwLVc45fKHr0NTrJ/mKcHpEHbJpib8oGgb0S/MCqGi5o25Fl6m4icGXkkKdILVcGDfyD2BNfpzg03w5d9Hr85GEm+zRUIqfC3tNSbU5XyF0VZ5f50vtP/dyL76fe9Qj5h/NP9RIxC2+tTthRf6hL/VZB4YI+oMPEEOw0nWXg4BJpSd2DtCXpwsP0w9ZoPs8zz/0Mf8Qcx5XJGzZIvmH/IlGxMVs91r1TyH/kCBz7o9lz2y/GkrxU1Nl8fM1FOq3L+SveUXkoNnMuYTf+VJP6MoCqz/HoszaWSM2Q22SYYjApbRa886OWZ96WjqYCROgPzSDzN3WLuTFwZRueQDPVW8N1Rjer3QQyM4fWU9MStptxQ0LreM4/Hk0Ff7hRW0M0Kt/GfbnES3nJT9F97O4r/jR19d7kLFzwl41fgle/6xSdc8fgrFNvdrrevBRGWTOfru//15v3XBFOJxIAM2yX9OOGufhR/2z5TeF7VlJTzWuBs+9TyVm17g03npn5dHUuBJk9/Vy/5vCXe2/uC18qXfHuy08Na7oJ15qnETW+G/WCdX45dj+WW+4dlN4/bMewm4Kj+f9eEONa8HbyZ/prXFNiL+/1EbiLSHb15vK3xS2jVv82Yb/Y2xPbL1W48rwUE/DbgsPm9r1e1N4qNMDbgsPH7Ur8aaw/Xipw823hO2+9nTcFKLv5258U+M68FYHnG8Lhzop8bawffrEbpY1rgCHfa0TbwrZ22MdYLkp3P27jjnfFl5f67nzbWFb68QL4T+Hg3aCFW4f7AAAAABJRU5ErkJggg==";
// Data for the PDF
$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.loan',['date_start' => $now,'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]);
// Store the PDF file on the server
$location = "contracts/";
$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 = "contracts";
$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' => "Udlån",
'Html-part' => view('emails.loan')
->with('logo',$logo)
->with('user',$user)
->with('date',$date)
->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('loans.index');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function laptop_create(Request $request)
{
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_create_laptop'))
? Response::allow()
: Response::deny('you are not the chosen one');
$products = Product::where('product_category_id','=',ProductCategory::where('name','=','Laptop')->first()->id)
->doesntHave('subcategory')
->get()
;
$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('loans.laptop.create')
->with('users',User::all())
->with('laptops',$products_valid)
->with('date_start_locked','true')
->with('date_end_permanent','true')
;
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function laptop_store(Request $request)
{
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_create_laptop'))
? Response::allow()
: Response::deny('you are not the chosen one');
$user = User::where('username','=',$request->user)->first();
$laptop = Product::where('id','=',$request->laptop_id)->first();
if(!$laptop){
return back()->withErrors('Laptop not found');
}
$available = $laptop->total - (count($laptop->loans) + count($laptop->reservations));
if(!$available >= 1){
return back()->withErrors('Laptop not available');
}
$phone = $request->telephone;
$email_private = $request->email;
$street_name = $request->street_name;
$street_number = $request->street_number;
$street_instruction = $request->street_direction;
$city_zip = $request->zip;
$city_name = $request->city;
$date_start = $request->date_start;
$date_end = $request->date_end;
$bag_input = $request->bag;
switch($bag_input){
case('on'):
$bag = "yes";
break;
default:
$bag = Null;
break;
}
$lock_input = $request->lock;
switch($lock_input){
case('on'):
$lock = "yes";
break;
default:
$lock = "no";
break;
}
$loan_type = LoanType::where('name','=','Loan')->first();
$now = date('Y-m-d');
if($request->permanent == 'on'){
$date_end = Null;
}
else{
$date_end = $request->date_end;
}
$user->loans()->create([
'loanable_id' => $laptop->id,
'loanable_type' => get_class($laptop),
'loan_type_id' => $loan_type->id,
'date_start' => $now,
'date_end' => $date_end
]);
Logger::LogLent($laptop->id,get_class($laptop),1,$user->id);
// Generate the PDF
$logo = "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";
// Data for the PDF
$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.laptop',['date_start' => $now,'date_end' => $date_end,'loaner' => $loaner_signature, 'lender' => $lender_signature,'user' => $user,'product' => $laptop,'telephone' => $phone,'email' => $email_private,'street_name' => $street_name,'street_number' => $street_number, 'street_instructions' => $street_instruction,'city_zip' => $city_zip,'city_name' => $city_name,'bag' => $bag,'lock' => $lock]);
// Store the PDF file on the server
$location = "laptops/";
$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 = "laptops";
$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' => "Bærbar Udlån",
'Html-part' => view('emails.laptop')
->with('logo',$logo)
->with('user',$user)
->with('date',$date)
->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('loans.index');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function return_page(Request $request)
{
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_return'))
? Response::allow()
: Response::deny('you are not the chosen one');
$cabels = Cabel::all();
$cabels_valid = [];
foreach($cabels as $cabel){
$lent = count($cabel->loans);
if($lent >= 1){
array_push($cabels_valid,$cabel);
}
}
$products = Product::all();
$products_valid = [];
foreach($products as $product){
$lent = count($product->loans);
if($lent >= 1){
array_push($products_valid,$product);
}
}
$users = User::all();
$note_types = NoteType::all();
return view('loans.return')
->with('users',$users)
->with('products',$products_valid)
->with('cabels',$cabels_valid)
->with('note_types',$note_types)
;
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function return_action(Request $request)
{
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_return'))
? Response::allow()
: Response::deny('you are not the chosen one');
$user = User::where('username','=',$request->user)->first();
$loan_type = LoanType::where('name','=','Loan')->first();
if(isset($request->products)){
foreach($request->products as $key => $value){
$product = Product::where('id','=',$request->product_id[$key])->first();
$loan_selection = Loan::where('user_id','=',$user->id)
->where('loanable_type','=',get_class($product))
->where('loanable_id','=',$product->id)
->limit($request->product_amount[$key])
->get();
foreach($loan_selection as $loan){
$loan->delete();
}
Logger::LogReturn($product->id,get_class($product),$request->product_amount[$key],$user->id);
}
}
if(isset($request->product_note_text)) {
foreach($request->product_note_text as $key => $value) {
$product = Product::where('id','=',$request->product_note_id[$key])->first();
$note = new Note();
$note->user_id = $user->id;
$note->note_type_id = $request->product_note_type[$key];
$note->loanable_id = $request->product_note_id[$key];
$note->loanable_type = get_class($product);
$note->note = $request->product_note_text[$key];
$note->save();
if(isset($request->product_note_remove[$key])){
if($request->product_note_remove[$key] == "on"){
$amount = $request->product_amount[$key];
$product->total -= $amount;
$product->save();
Logger::LogAmountRemoved($product->id,get_class($product),$amount);
}
}
Logger::LogNote($product->id,get_class($product),$user->id,$request->product_note_text[$key]);
}
}
if(isset($request->cabels)){
foreach($request->cabels as $key => $value){
$cabel = Cabel::where('id','=',$request->cabel_id[$key])->first();
$loan_selection = Loan::where('user_id','=',$user->id)
->where('loanable_type','=',get_class($cabel))
->where('loanable_id','=',$cabel->id)
->limit($request->cabel_amount[$key])
->get();
foreach($loan_selection as $loan){
$loan->delete();
}
Logger::LogReturn($cabel->id,get_class($cabel),$request->cabel_amount[$key],$user->id);
}
}
if(isset($request->cabel_note_text)) {
foreach($request->cabel_note_text as $key => $value) {
$cabel = Cabel::where('id','=',$request->cabel_note_id[$key])->first();
$note = new Note();
$note->user_id = $user->id;
$note->note_type_id = $request->cabel_note_type[$key];
$note->loanable_id = $request->cabel_note_id[$key];
$note->loanable_type = get_class($cabel);
$note->note = $request->cabel_note_text[$key];
$note->save();
if(isset($request->cabel_note_remove[$key])){
if($request->cabel_note_remove[$key] == "on"){
$amount = $request->cabel_amount[$key];
$cabel->total -= $amount;
$cabel->save();
Logger::LogAmountRemoved($cabel->id,get_class($cabel),$amount);
}
}
Logger::LogNote($cabel->id,get_class($cabel),$user->id,$request->cabel_note_text[$key]);
}
}
return redirect()->route('loans.index');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\Foundation\Application|\Illuminate\Contracts\View\Factory|\Illuminate\Contracts\View\View
*/
public function adjust_page(Request $request, $loan)
{
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_adjust'))
? Response::allow()
: Response::deny('you are not the chosen one');
$loan_obj = Loan::where('id','=',$loan)->first();
return view('loans.adjust')
->with('users',User::all())
->with('data',$loan_obj)
;
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\RedirectResponse
*/
public function adjust_action(Request $request, $loan)
{
Auth::user()->role->permissions->contains(Permission::firstWhere('name', '=', 'loans_adjust'))
? Response::allow()
: Response::deny('you are not the chosen one');
$new_date = $request->date_end;
$primary_loan_obj = Loan::where('id','=',$loan)->first();
$loan_user = $primary_loan_obj->user_id;
$loan_type = $primary_loan_obj->loan_type_id;
$loan_start = $primary_loan_obj->date_start;
$loan_loanable_id = $primary_loan_obj->loanable_id;
$loan_loanable_type = $primary_loan_obj->loanable_type;
$loans = Loan::where('user_id','=',$loan_user)
->where('loan_type_id','=',$loan_type)
->where('date_start','=',$loan_start)
->get()
;
Logger::LogAdjusted($primary_loan_obj->id,get_class($primary_loan_obj),'Slut Dato : '.date('d.m.Y',strtotime($primary_loan_obj->date_end))." til ". date('d.m.Y',strtotime($new_date)));
foreach($loans as $loan){
$loan->date_end = $new_date;
$loan->save();
}
return redirect()->route('loans.index');
}
}