851 lines
50 KiB
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 = "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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.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 = "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.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');
|
|
|
|
}
|
|
|
|
}
|